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

关于Hans Passant对这个问题的回答… 用IDisposable清理Excel Interop对象 …

他启发我的事实,我不需要遵循两点规则…声明所有COM对象,所以我可以释放通过Marshal.ReleaseComObject时,他们完成。 所以现在我明白我可以在我的Excel代码之后调用GC.Collect和GC.WaitForPendingFinalizers,并且所有对象都会正确释放。 一个,我认为这是伟大的,将减less我写在C#中的macros的长度,但我习惯于释放对象,一旦我完成它们,以最大限度地减lessmacros运行时的内存使用情况。 我应该关心清理物体,还是像汉斯所build议的那样,在macros的末尾进行清理呢? 我通常使用巨大的文件,我的macros将创build许多COM对象来完成任务。

我一有习惯就释放对象,以尽量减lessmacros运行时的内存使用量。 我应该关心清理物体,还是像汉斯所build议的那样,在macros的末尾进行清理呢?

一般来说,一旦你完成了任何资源的释放。 资源越昂贵和/或稀缺,就越重要。 数据库连接,内存,文件句柄等都是如此

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

话虽如此,表演

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

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

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