繁体   English   中英

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

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

我有一个包含不同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对象的区别,请停止编写互操作代码,直到您了解它为止 内存安全系统专为您的安全和方便而设计; 除非您能描述这样做的所有后果,否则请不要混淆。

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

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

当然不是。 为什么要这样 清除列表 当您的程序逻辑要求清除列表时,请清除该列表。 不要清除列表,因为您认为这样做会对其他代码产生连锁反应!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM