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