COM-объектам тоже x86. Варианта использовать x64 нет к сожалению. Программа работает с COM-объектом используя позднее связывания. Во время работы создаются объекты, вызываются методы и тп, все "как обычно". В конце все объекты уничтожаются через Marshal.FinalRelease(Объект); Объект = null; GC.Collect;
Но если посмотреть то что находится в GC.GetTotalMemory то там полгигабайта может быть.
Проблема собственно в том что с недавнего времени начало выпадать исключение Out of memory и программа стала падать.
Соответственно два вопроса:
1. Как убедится что все объекты что надо уничтожены?
2. Как вернуть память до того как происходит out of memory?
Смотря что за обьект. указать его к null может быть не достаточно, так как это считай другой процесс, и твоя программа которая задействует COM, не управляет жизненым циклом другой программы. На примере экселя по COM тебе нужно будет в ручную вызвать закрытие и завершение программы.
Обсуждают сегодня