不要取消订阅COMObject事件可能导致内存泄漏,尽管我使用Marshal.FinalReleaseComObject?虽然我使用Marshal.FinalReleaseComObject,但是不要取消订阅COMObject事件会导致内存泄漏?
我已经定义在我的课的新成员是COMObject
protected COMObject.Call call_ = null;
这个类有以下事件处理程序,我订阅了
call_.ActionA += new COMObject.AEventHandler(AEvent);
call_.ActionB += new COMObject.BEventHandler(BEvent);
call_.Destructed += new COMObject.DestructedEventHandler(CallDestructedEvent);
当破坏事件被称为我做元帅。 FinalReleaseComObject
Marshal.FinalReleaseComObject(call_)
但未取消订阅事件
call_.ActionA -= new COMObject.AEventHandler(AEvent);
call_.ActionB -= new COMObject.BEventHandler(BEvent);
call_.Destructed -= new COMObject.DestructedEventHandler(CallDestructedEvent);
这是否会导致内存泄漏?或者GC会处理它? 您可以将您的答案链接到某些MSDN或文章吗?
谢谢!多尔。
随机猜测内存泄漏的原因很少是正确的做事方式。有一些工具(一些免费的,一些是免费的)可以帮助您找到泄漏源。你会更好地发现和使用这些。 – 2012-02-08 13:22:20
你能推荐一个吗?那可以处理COM和.Net? – 2012-02-08 13:25:40
我开始使用“调试工具for Windows”(特别是ADPlus)来捕获内存转储(希望在出现OutOfMemoryException时或稍后使用一段时间)。然后可以使用WinDBG来探索内存转储。一个名为SOS的扩展可以被加载,然后允许你从.NET的角度来检查相同的转储。在尝试使用它们之前,我会去阅读这些内容(它们不适合那些微弱的人) – 2012-02-08 15:52:45