c#垃圾收集。 .NET CLR内存Perfmon计数器显示0代表0堆大小等。这是什么意思?

时间:2014-10-26 21:54:32

标签: c# .net memory-leaks garbage-collection

我一直在阅读有关.NET CLR内存性能计数器的信息

http://msdn.microsoft.com/en-us/library/x2tyfybc(v=vs.110).aspx

许多专柜都有以下警告:

This counter is updated at the end of a garbage collection, not at each allocation.

我发现了一个应用程序的内存泄漏,并检查了所有堆上的gen 0堆大小,gen 1,#bytes,它们显示为0.这可信吗?如何区分以下两种情况?

  1. 尚未进行垃圾收集
  2. 我的应用没有任何gen 0,1 etc分配 ?

1 个答案:

答案 0 :(得分:3)

我会把钱花在上面1)垃圾收集还没有发生。

我已经比较了以下两种情况的性能监视器输出:

static void Main(string args[])
{
    Console.ReadLine();
}

在这种情况下,性能监视器在所有堆中显示0个字节。

用这个显示所有堆中的22,496个字节。

static void Main(string args[])
{
    GC.Collect();
    Console.ReadLine();
}

这表明即使是没有直接分配内存的空app也会有一些堆分配。

您可以通过在代码中的某个位置拨打GC.Collect来测试此问题。