メモリリークを追跡するために、私はVisual StudioとSOS.dllを使用して、オブジェクトヒープのダンプを提供し、特定のオブジェクトのGCRootingが適切に行われていることを確認しています。
AutoItを使用してこのプロセスの自動化を開始し、マウスとキーボードを制御しました。これが私のスクリプトの最初の部分の概算です:
Visual Studioで、F5キーを押して実行を開始
しますプログラムを完全にロード
しますVisual Studioに切り替えて、実行を中断しますフォーカスをイミディエイトウィンドウに切り替えます
SOS.dllをロードします
呼び出し!dumpheap -stat
ダンプの結果をクリップボードにコピーします
メモ帳に貼り付けて、dump1.txtとして保存します実行を再開する
リークアクションを何度も実行するVisualStudioに
切り替えて、実行を中断するフォーカスをイミディエイトウィンドウに切り替えます
出力をクリアします
呼び出し!dumpheap -stat
ダンプの結果をクリップボードにコピーします
メモ帳に貼り付けてdump2.txtとして保存します2つのダンプを比較してリークされたオブジェクトを見つけるPythonスクリプトを実行します
ただし、現在の方法にはいくつか懸念があります。Visual Studioのインストールに依存しているだけでなく、スクリプトの実行中は、自動化を順不同にしないとマウスやキーボードを使用できません。
Visual StudioではなくC#プログラム内でSOS.dllを使用する方法はありますか?理想的には、このソリューションは、!dumpheap -stat
Visual Studioを自動化する必要なしに、指定されたプロセスにアタッチし、その結果をテキストファイルに出力します。