マネージ アプリケーションの受け入れテストを作成して、データのロードおよびアンロード時にメモリ リークが発生していないことを確認しています。これが私がやっていることのサンプルコードです:
System.Diagnostics.Process process = System.Diagnostics.Process.GetCurrentProcess();
long memoryBefore = process.PrivateMemorySize64;
// Keep creating new projects.
for (int i = 0; i < 100; i++){
MyApplication.CreateObject();
MyApplication.UnlaodLastCreatedObject();
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.GC.WaitForFullGCComplete();
}
プロセスのメモリ消費量が同じ (+1MB) かどうかをテストするには、次のようにします。
// Refresh the memory statistics
process.Refresh();
Assert.Less((decimal)process.PrivateMemorySize64,(decimal)(memoryBefore + (1024 * 1024)));
このテストは時々ランダムに失敗するため、まったく信頼できないようです。上記のコードに何か問題がありますか? 私のプロセスがメモリをリークしていないかどうかをテストする別の方法はありますか?
編集 失敗はランダムです。以下は私のビルドサーバー出力のスクリーンショットで、時々テストが失敗していることをはっきりと見ることができます。
ありがとうございました。