バックグラウンド
Telerik TestStudio(ビジュアルスタジオプラグイン)を使用した自動テストがあります。これにより、WPFアプリケーションに接続してテストを実行するため、自動化は1つのプロセスとして実行され、アプリケーションはもう1つのプロセスとして実行されます。ここで、メモリリークや類似物が発生しないように測定して保護したいと考えています。これは、開発中のできるだけ早い段階で、顧客に届く前に確認したいと考えています。
メモリを測定することは問題ありません。ただし、.NETCLRのメモリヒープサイズはもっと注意が必要なようです。
これは、Windowsパフォーマンスモニターが取得できる結果と同じです。(perfmon.exe)
私が試したこと
ガベージコレクターにはプロセスのこの情報が含まれているため、これを使用できません
var heap = GC.GetTotalMemory();
私が試したのは、WMIクラスを使用してこれを取得することですが、成功することはありません。魅力的なクラスが1つあります。Win32_PerfFormattedData_NETFramework_NETCLRMemoryだから、試してみようと思いました。
var searcher = new ManagementObjectSearcher(@"select * from Win32_PerfFormattedData_NETFramework_NETCLRMemory");
foreach (ManagementBaseObject baseObject in searcher.Get())
{
var heap0 = baseObject["HeapSize0"];
var heap1 = baseObject["HeapSize1"];
var heap2 = baseObject["HeapSize2"];
}
上記の問題は、Get()が何も返さないことです。foreachループの最初の行にブレークポイントを設定すると、ブレークポイントは入りません。
質問
- C#でこれを行う他の方法はありますか?
- 以前に別のプロセスからこのヒープサイズを取得しようとした人はいますか?