しばらく実行すると「メモリ不足」の例外が発生するプログラムがあります。これはかなり複雑なプログラムで、かなり多くの非同期処理が含まれています。コードから開始して問題を診断するのではなく、ガベージ コレクトされていないメモリを乱雑にしているオブジェクトを特定できれば、有利なスタートが切れるかもしれないと考えました。
これを行う方法はありますか?
しばらく実行すると「メモリ不足」の例外が発生するプログラムがあります。これはかなり複雑なプログラムで、かなり多くの非同期処理が含まれています。コードから開始して問題を診断するのではなく、ガベージ コレクトされていないメモリを乱雑にしているオブジェクトを特定できれば、有利なスタートが切れるかもしれないと考えました。
これを行う方法はありますか?
スレッドを使用して特定のスレッドを同時に実行するなど、スレッドでコード制御を非同期にする場合、たとえば、この実行の完了後に 10 スレッドのみを同時に実行し、次の 10 スレッドを実行し、アンマネージ オブジェクトを作成している場合は、それを明示的に破棄します。
プロファイラーを使用してオブジェクトをチェックできますが、多くの非同期処理が組み込まれている場合、それに応じてロジックを変更できないことがあります。
通常、イベント ハンドラー パターンを使用することで、知らないうちにメモリ リークが発生します。
これに関する投稿がいくつかあります: http://www.codeproject.com/Articles/123448/GC-Algorithm-and-Story-of-WeakReference
http://www.abhisheksur.com/2012/02/optimizing-inpc-objects-against-memory.html
それらはあなたの問題に固有のものではありませんが、あなたを助けることができます.
私は間違いなくプロファイラーを使用します。メモリ プロファイリングに使用した中で最も優れたものの 1 つは、SciTech のメモリ プロファイラーScitech .NET Memory Profilerです。