需要澄清答案正确清理Excel互操作对象

关于Hans Passant在这里回答这个问题......用IDisposable清理Excel Interop对象...

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


一旦我完成了这些操作,我就习惯于释放对象,以尽量减少宏运行时的内存使用量。 我应该关心清理物体还是像汉斯所建议的那样在宏的末尾进行清理?

作为一般规则,只要您完成了任何资源的释放。 资源越贵和/或稀缺,就越重要。 数据库连接,内存,文件句柄等都是如此。

对于引用COM对象也是有效的。

话虽如此,表演

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

是一个明智的做法,以便发布任何可能引起您尽快实现的清理措施。

有一个反驳的论点,你可以运用常识来申请,看看你自己的情况。 你最终编写更多的代码来清理每个COM参考。 如果您在达到清理点之前未创建过多的COM对象,则可能需要选择更简单的代码(例如使用双点),因为您知道临时占用的资源比您绝对需要的要多。

链接地址: http://www.djcxy.com/p/35653.html

上一篇: Need Clarification On Answer For Cleaning Up Excel Interop Objects Properly

下一篇: Alternatives to Excel Interop SaveAs() method