需要澄清答案正确清理Excel Interop对象

时间:2015-05-06 17:24:50

标签: .net excel interop com-interop

关于Hans Passant对这个问题的回答...... Clean up Excel Interop Objects with IDisposable ......

他启发我的事实是我不需要遵循两点规则...声明所有com对象,这样我就可以通过Marshal.ReleaseComObject释放它们。所以现在我明白我可以在我的Excel代码之后调用GC.Collect和GC.WaitForPendingFinalizers,并且所有对象都将被正确释放。首先,我认为这很好,并且会减少我在c#中编写的宏的长度,但是当我完成它时,我习惯于释放对象,以便在宏运行时最小化内存使用。我应该关注在我去的时候清理物体还是可以像汉斯建议的那样在宏的末尾进行清理?我通常使用大文件,我的宏将创建许多com对象来完成任务。

1 个答案:

答案 0 :(得分:0)

  

我习惯在完成对象后立即释放对象,以便在宏运行时最大限度地减少内存使用量。我应该关注在我去的时候清理物体,还是像汉斯建议的那样在宏的末尾进行清理是否可以?

作为一般规则,请在完成后立即释放任何资源。资源越昂贵和/或稀缺,就越重要。数据库连接,内存,文件句柄等也是如此。

它对COM对象的引用也有效。

说完了,执行

GC.Collect();
GC.WaitForPendingFinalizers();

是一个明智的做法,以便发布您的尽快清理可能已经捕获的任何引用。

有一个反驳的论点,您可以使用常识并根据自己的情况来应用。您最终会编写更多代码来清理每个COM引用。如果你没有在到达可以清理的点之前创建过多的COM对象,那么可能值得选择更简单的代码(例如使用双点),因为知道你暂时消耗的资源比你绝对需要的多。