gpt4 book ai didi

c# - 是否清除包含 ComObject 的列表,在 C# 中释放所有这些对象?

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

我有一个包含不同 ComObject 的列表。如果我执行 myList.Clear() 是否就足够了,还是应该遍历它并执行此操作。

for (int i = 0; i < myList.Count; ++i)
if (System.Runtime.InteropServices.Marshal.IsComObject(myList[i]))
System.Runtime.InteropServices.Marshal.ReleaseComObject(myList[i]);

myList.Clear();

最佳答案

它没有坏,所以不要修理它。如果您对 COM 对象的收集语义没有问题,请让垃圾收集器完成它的工作。如果您遇到问题,请仔细描述问题以及您对 C# 中的 COM 互操作的理解

特别是,调用 ReleaseComObject 来管理 RCW 或更糟,Release 在实际 pUnknown 上是一个仅供互操作专家使用的利器。不正确地使用这些工具会使您陷入各种可怕的情况,充满崩溃和内存损坏。 (如果您曾经看到“COM 对象从其 RCW 中分离”异常,您知道有人认为他们知道他们在做什么调用 ReleaseComObject 错了。)

如果您不了解 RCW 是什么或它的用途或它与底层 COM 对象有何不同,请停止编写互操作代码,直到您理解它。内存安全系统专为您的安全和便利而设计;除非你能描述所有这样做的后果,否则不要乱搞。

我注意到您的实际问题从未得到回答:

Does clearing a List containing ComObject, release all of them in c#?

当然不是。为什么要这样?它清除列表。当您的程序逻辑要求清除列表时,清除列表。不要因为您认为这样做会对其他代码产生链式 react 而清除列表!

关于c# - 是否清除包含 ComObject 的列表,在 C# 中释放所有这些对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48836330/

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