gpt4 book ai didi

c# - 如何正确清理 C# 中的互操作对象

转载 作者:太空狗 更新时间:2023-10-29 22:56:12 28 4
gpt4 key购买 nike

这是后续问题 How to properly clean up excel interop objects in c# .

要点在于,在 Excel 命名空间内一起使用链接调用(例如 ExcelObject.Foo.Bar() )可防止对 COM 对象进行垃圾回收。相反,应该显式创建对每个使用的 COM 对象的引用,并使用 Marhsal.ReleaseComObject() 显式释放它们。

链式调用后不释放 COM 对象的行为是否仅特定于 Excel COM 对象?每当使用 COM 对象时应用这种模式是否过大?

最佳答案

在处理 Office 应用程序时,正确处理发布肯定比许多其他 COM 库更重要,原因有二。

  1. Office 应用作为进程外服务器而不是进程内库运行。如果您未能正确清理,就会让进程继续运行。
  2. Office 应用程序(尤其是 Excel IIRC)不会正常终止,即使您调用 Application.Quit,如果存在对其 COM 对象的未完成引用。

对于常规的进程内 COM 库,未能正确清理的后果并不那么严重。当您的进程退出时,所有进程内库都会随之消失。如果您在不再需要某个对象时忘记调用 ReleaseComObject,它最终仍会在对象最终确定时得到处理。

也就是说,这不是编写草率代码的借口。

关于c# - 如何正确清理 C# 中的互操作对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1372292/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com