レガシー アプリケーションでメモリ リークが発生しているため、コードがよくわかりません。MemProfiler で分析したところ、オブジェクトから参照されるオブジェクトが増えていることがわかりましたTimerCall
。これらはオブジェクトTimerCallback
によって参照され、ルートの子です。_TimerCallback
グラフはRoot
-> _TimerCallback
-> TimerCallback
->のようになりMyObject
ます。
MyObject
コンストラクターには a が必要なので、次のTimerCallback
ような呼び出しがいくつかあります。
new MyObject(int timeout, new TimerCallback(SomeCallbackMethod));
正直なところ、このようにするのはかなり厄介に見えますが、私が書いたように、これはレガシー アプリケーションであり、「C スタイル」の C# で記述されており、null の代入とDispose()
呼び出しがたくさんあります...
TimerCallback
では、これらの参照をルートから削除するにはどうすればよいでしょうか?