如何正确清理C#中的互操作对象
这是如何正确清理c#中的excel interop对象的问题。
gyst是在Excel命名空间内使用链接调用(例如,ExcelObject.Foo.Bar())可以防止COM对象的垃圾收集。 相反,应该明确地创建对每个使用的COM对象的引用,并使用Marhsal.ReleaseComObject()明确地释放它们。
仅在特定于Excel COM对象的链接调用后不释放COM对象的行为? 无论何时使用COM对象,应用这种模式是否矫枉过正?
出于两个原因,处理Office应用程序时处理发行版肯定比许多其他COM库更重要。
对于普通的进程内COM库来说,未能正确清理的后果并不那么显着。 当你的进程退出时,所有进程内库都会消失。 如果您不再需要它时忘记在某个对象上调用ReleaseComObject,那么在对象最终完成时它仍然会被照顾。
这就是说,这不是写潦草的代码的借口。
COM对象基本上是非托管代码 - 只要您从托管应用程序开始调用非托管代码,它就成为您在非托管代码之后清理的责任。
总之,在上面的帖子中链接的模式对于所有 COM对象都是必需的。
链接地址: http://www.djcxy.com/p/35711.html