Я создал инструмент, который импортирует лист Excel. COM-объект Excel создается во время жизни приложения. Я применил шаблон MVP к своему инструменту, чтобы VIEW и Presenter разделяли пользовательский интерфейс и логику.
vIEW, который является WinForm, имеет наследуемое наследование метода Dispose () от класса From, который переопределяется в коде Deisgner.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
_presenter.Dispose();
}
Это буквально, куда я вставляю свой вызов dispose моего докладчика, который сам по себе является управляемым кодом, но все же содержит неуправляемые объекты COM.
Затем докладчик пытается освободить COM-объект следующим образом:
public void Dispose()
{
Int32 countDown = 1;
while (countDown > 0)
countDown = Marshal.ReleaseComObject(_excelObj);
}
Если я открою приложение, ничего не импортировав, процесс Excel исчезнет после закрытия приложения. Иначе, если приложение используется для импорта листа, объект excel больше не отпускается и остается в памяти., Даже если задание успешно выполнено или отменено.
Я нашел хорошую ссылку, которая помогла мне в дальнейшем, но проблема все еще остается:
Как обеспечить правильную утилизацию объектов в .NET?
Спасибо за помощь,