2012-11-03 62 views
2

我想在C#或C++或C中更好地使用一些方法。
要測量時間,我可以使用秒錶類,但另外我想測量被消滅代碼保留的內存。您是否知道任何類別或方法與以下代碼中使用的MemoryMeasure類具有相似的屬性?測量代碼使用的內存

Stopwatch s1 = Stopwatch.StartNew(); 
MemoryMeasure m1 = MemoryMeasure.Start(); 
for (int i = 0; i < m; i++) 
{ 
//some compute 
//for example 
//var x = new LargeObject(new SmallObject(), 45); 
//some compute 
//some compute 
} 
m1.Stop(); 
s1.Stop(); 

Console.Writeline("Your code was executed in " + s1.ElapsedMilliseconds + "ms"); 
Console.Writeline("Your code ate " + m1.UsedMemory + "MB of memory"); 

回答

4

您將需要使用內存分析器 - 有幾個免費和商業工具。

dotTrace and Ants memory profiler是兩個流行的商業。我們有a few free ones

+2

使用['GC.GetTotalMemory'](http://stackoverflow.com/a/13039467/284240)有什麼問題,你可以詳細說明這一點? –

+0

@TimSchmelter - 看到[這個答案](http://stackoverflow.com/a/4738030/1583)有一個原因(基本上,GC週期可能發生在測量點之間,使得該值爲負值且無意義)。 – Oded

+0

免費的鏈接不起作用。 – AlwaysLearning

2

您可以嘗試使用GC.GetTotalMemory靜態方法,但我不確定以這種方式測量內存是個好主意。內存分析器是更好的選擇

+1

爲什麼它好多了? –

+0

Oded是正確的,GC不是你可以依賴的東西,它的工作是相當不可預測的,所以不能保證每次在相同的條件下調用GetTotalMemory都會得到正確的值。 –