我有一個C#控制檯應用程序,我想以編程方式(不借助Visual Studio)監視GC活動。舉例來說,如果我有這樣的代碼:如何以編程方式監視C#應用程序中的GC活動?
public static void Main()
{
for (int i = 0; i < 100000; i++) AllocateByteArray();
}
private static void AllocateByteArray()
{
new byte[1000];
}
是否有使用GC
類監控多少次循環運行時發生的垃圾收集方式?我最初嘗試是這樣的:
Console.WriteLine("Before:");
Console.WriteLine(GC.GetTotalMemory(false));
// do work...
Console.WriteLine("After:");
Console.WriteLine(GC.GetTotalMemory(false));
Console.WriteLine("After collection:");
Console.WriteLine(GC.GetTotalMemory(true));
但我意識到測量並沒有真正告訴我什麼,因爲GC,而我在做的工作可能發生。我對.NET中的GC APIs不太熟悉,有沒有辦法以編程方式來測量這些類型的統計信息?謝謝。
https://msdn.microsoft.com/en-us/library/w8f5kw2e(v=vs.110).aspx –
附加GC相關閱讀:[每個人都認爲關於垃圾收集錯誤的方式(HTTPS: //blogs.msdn.microsoft.com/oldnewthing/20100809-00/?p=13203),[什麼時候一個對象可用於垃圾回收?](https://blogs.msdn.microsoft.com/oldnewthing/20100810 -00 /?p = 13193)以及當你知道的每件事都是錯誤的[Part 1](https://ericlippert.com/2015/05/18/when-everything-you-know-is-wrong-part-one/ )[第2部分](https://ericlippert.com/2015/05/21/when-everything-you-know-is-wrong-part-two/) – theB