这是一个关注的问题 How to properly clean up excel interop objects in c#
gyst是在Excel命名空间内一起使用链接调用(例如ExcelObject.Foo.Bar())可以防止COM对象的垃圾收集。相反,应该显式创建对所使用的每个COM对象的引用,并使用Marhsal.ReleaseComObject()显式释放它们。
仅在Excel COM对象的链式调用之后不释放COM对象的行为是什么?每当使用COM对象时,应用这种模式是否过度?
答案 0 :(得分:6)
在处理Office应用程序时,与其他许多COM库相比,处理版本更为重要,原因有两个。
对于常规的进程内COM库,未能正确清理的后果并不那么引人注目。当您的进程退出时,所有进程内库都会消失。如果你在不再需要它时忘记在一个对象上调用ReleaseComObject,那么当对象最终确定时,它仍然会被最终处理。
那就是说,这不是编写草率代码的借口。
答案 1 :(得分:2)
COM对象本质上是非托管代码 - 一旦您开始从托管应用程序调用非托管代码,您就有责任在该非托管代码之后进行清理。
简而言之,上述帖子中链接的模式对于所有 COM对象都是必需的。