我寫了一個自動化測試,以確保我們的應用程序現在不會泄漏(管理&非託管內存),並隨着開發的不斷增長。問題是我的測試似乎不可靠,但我不知道這是.NET固有的,泄漏定義還是測試。如何以可靠且自動的方式測量.NET中的內存泄漏?
它發生是這樣的:
long start = PrivateBytes;
// here is the code for an action which is expected to be memory-constant
long difference= PrivateBytes-start;
Console.WriteLine(difference); // or Assert(difference < MyLimit);
private static long PrivateBytes
{
get
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
return Process.GetCurrentProcess().PrivateMemorySize64;
}
}
我的問題是:爲什麼會在差異巨大的變化? (例如:一次運行11Mo,下一次33Mo)。這些變化是正常的還是我可以刪除它們?
精度:我不是在尋找一個探查器工具! (我已經使用了一個!)
我已經使用了賽特MemProfiler上一個中等規模的應用程序(50萬線),雖然三年前,它的運作非常好。您可以捕捉快照,然後「比較」快照以找出實際發生的變化。 – stusmith 2009-02-10 10:08:11