C# 为什么GC.GetTotalMemory返回不同的结果?

C# 为什么GC.GetTotalMemory返回不同的结果?,c#,memory-management,garbage-collection,C#,Memory Management,Garbage Collection,当我尝试这个代码时 public static void Main() { Console.WriteLine("Total bytes : " + GC.GetTotalMemory(true)); Console.WriteLine("Total bytes : " + GC.GetTotalMemory(true)); Console.WriteLine("Total

当我尝试这个代码时

public static void Main()
            {
                Console.WriteLine("Total bytes : " + GC.GetTotalMemory(true));

                Console.WriteLine("Total bytes : " + GC.GetTotalMemory(true));

                Console.WriteLine("Total bytes : " + GC.GetTotalMemory(true));

                Console.ReadKey();
            }
我得到了这些结果


为什么第一个结果和其他结果之间存在差异?

不确定,但
控制台。WriteLine
正在消耗内存。。。这是因为一次调用后,内存值不会改变


请查看此答案,以帮助您更详细地了解问题:

其中一个原因是您的代码被翻译成如下内容:

int totalMemory = GC.GetTotalMemory(true);
string s = "Total bytes : " + totalMemory;
Console.WriteLine(s);
在上面代码的第二行,如果尚未初始化
字符串
类,则初始化该类。这意味着它的静态字段被初始化,并且它的静态构造函数被调用(如果有)。然后调用
Concat()
方法,并初始化运行期间所需的所有类

在第三行,
控制台
类被初始化,如果它还没有被初始化的话。当然,执行
WriteLine()
过程中使用的所有类也是如此


所有静态字段都需要一些内存,因此可以感觉到,当您第二次调用
GC.GetTotalMemory()
时,您会得到一个稍高的数字。