Marshal.FinalReleaseComObjectを使用していますが、COMObjectイベントの登録を解除してもメモリリークが発生する可能性がありますか?Marshal.FinalReleaseComObjectを使用していますが、COMObjectイベントからの登録を解除してもメモリリークが発生する可能性がありますか?
私は、このクラスは、破壊イベントが、私は元帥を行うと呼ばれたとき、私は
call_.ActionA += new COMObject.AEventHandler(AEvent);
call_.ActionB += new COMObject.BEventHandler(BEvent);
call_.Destructed += new COMObject.DestructedEventHandler(CallDestructedEvent);
に加入して、次のイベントハンドラがありますCOMObject
protected COMObject.Call call_ = null;
である私のクラスでの新しいメンバーを定義しています。 FinalReleaseComObject
Marshal.FinalReleaseComObject(call_)
イベントからの退会はありません
call_.ActionA -= new COMObject.AEventHandler(AEvent);
call_.ActionB -= new COMObject.BEventHandler(BEvent);
call_.Destructed -= new COMObject.DestructedEventHandler(CallDestructedEvent);
これはメモリリークを引き起こす可能性がありますか? GCがそれを処理するかどうか 回答をMSDNまたは記事にリンクできますか?
ありがとうございます! Dor。
メモリリークの原因を無作為に推測することは、まれにしか行いません。リークの原因を見つけるのに役立つツールがいくつかあります(無料、有料)。あなたはそれらを見つけて使うほうがいいでしょう。 –
1つでお勧めできますか?それはCOMと.NETを扱うことができますか? –
私は「Windows用のデバッグツール」、特にADPlusを使ってメモリダンプをキャプチャすることから始めます(うまくいけば、OutOfMemoryExceptionが発生したとき、または長期間使用した直後のいずれか)。 WinDBGを使用して、そのメモリダンプを探索することができます。 SOSと呼ばれる拡張機能をロードすることができます。これにより、.NETの観点から同じダンプを調べることができます。私は行って、あなたがそれらを使用しようとする前にそれらを読んで(彼らはかすかな心のためではない) –