gpt4 book ai didi

c# - 释放一个 Com 对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:12 25 4
gpt4 key购买 nike

哪种释放 com 对象的方法更正确,类型 1 或类型 2 还是无关紧要? (_文档 是一个 接口(interface))

    private IHTMLDocument2 _document;


public HtmlDocument()
{
_document = new HTMLDocumentClass();
}

private void DisposeUnmanagedResources1()
{
if (_document != null)
{
Marshal.ReleaseComObject(_document);
_document = null;
}
}

private void DisposeUnmanagedResources2()
{
if (_document != null)
{
var doc = ((HTMLDocumentClass) _document);

Marshal.ReleaseComObject(doc);
doc = null;
_document = null;
}
}

最佳答案

正确的做法是什么都不做 - 当对象不再可访问时,.Net 框架将负责减少引用计数。

事实上,您不应该调用ReleaseComObject 有几个原因 - 首先是因为 COM 对象实际上可能是托管 COM 对象,在这种情况下对 ReleaseComObject 的调用将失败,其次,因为其他托管组件可能引用了它们仍在使用的 _document。 (可能不是在你的例子中,但在其他情况下很有可能)

参见 this blog article获取更多信息。

更新:BrendanMcKs 的回答有几篇有趣的文章介绍了为什么您可能希望在某些情况下(通常是服务器应用程序)显式调用 ReleaseComObject 以尽快释放 COM 对象出于性能原因尽可能。

关于c# - 释放一个 Com 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796806/

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