В отношении к ответу на вопрос здесь Ханс Passant ... Clean up Excel Interop Objects with IDisposable ...нуждаются в разъяснении на Ответ для очистки Excel Interop объектов Правильно
Он просветил меня в том, что мне не нужно, чтобы следуйте правилу двух точек ... объявляя все COM-объекты, чтобы я мог освободить через Marshal.ReleaseComObject, когда закончите с ними. Итак, теперь я понимаю, что могу просто вызвать GC.Collect и GC.WaitForPendingFinalizers после моего кода Excel, и все объекты будут выпущены должным образом. Во-первых, я думаю, что это здорово и уменьшит длину макросов, которые я пишу в C#, но у меня была привычка выпускать объекты, как только я был сделан с ними, чтобы минимизировать использование памяти во время запуска макроса. Должен ли я быть связан с очисткой объектов, когда я иду, или это нормально, просто делать очистку в конце макроса, как предложил Ганс? Я обычно работаю с огромными файлами, и мои макросы создадут много com-объектов для выполнения задачи.
Ну, я бы не рекомендовал руководство GC.Collect() после каждой другой линии. Хорошо, когда вы достигаете завершения значительной операции взаимодействия (например, открываете документ, находите лист, итерации через кучу строк, выпускаете документ, затем выполняете GC.Collect() и GC.WaitForPendingFinalizers ()) –