我有一个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