gpt4 book ai didi

c# - 如何销毁 C# 中的 COM 对象?

转载 作者:太空狗 更新时间:2023-10-29 17:28:52 24 4
gpt4 key购买 nike

在C#中销毁Excel COM Interop对象的方法还有哪些,除了这些:

object_instance = null;
System.GC.collect();
&
System.Runtime.InteropServices.Marshal.ReleaseComObject(object);

请仅建议内置技术,不要建议其他工具,如 bigcannon 等。

最佳答案

关键在于,如果您没有删除对该对象的所有引用,即使 GC.Collect 也不会销毁它。

C#(或一般的 .NET)中的规则是您不能销毁对象。 Dispose() 不会这样做。终结器不会这样做(规则 2,除非您知道为什么需要它,否则不要使用终结器,并且永远不要直接调用它)。

对于 .NET,这些是您需要做的事情:

  1. 如果对象持有对非托管对象的引用,则实现 IDispose 模式。并全面实现;它不仅仅是提供 Dispose() 方法。
  2. 拥有终结器的唯一原因是释放非托管对象,并且仅在您的对象未被正确处置的情况下。调用 dispose 方法后,它应该进行清理,然后通过调用 GC.SuppressFinalize 来“终止”终结器。
  3. 如果您使用的对象实现了 Dispose() 方法,请在使用完该对象后调用 Dispose()。最佳做法是使用 using block 分配该对象。退出 using block 将自动调用 Dispose()。
  4. 当您完成一个对象后,删除对该对象的所有引用,包括事件处理程序、委托(delegate)等。
  5. 除此之外,相信垃圾收集器会完成它的工作。不要惹垃圾收集器;你只会让事情变得更糟,除非你真的、真的、真的知道你在做什么以及为什么。

关于c# - 如何销毁 C# 中的 COM 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448763/

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