当我尝试这段代码时
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();
}
我得到了这些结果
为什么第一个和其他结果之间存在差异?
答案 0 :(得分:4)
这样做的一个原因是你的代码被翻译成这样的东西:
int totalMemory = GC.GetTotalMemory(true);
string s = "Total bytes : " + totalMemory;
Console.WriteLine(s);
在上面代码的第二行,String
类已初始化,如果它已经没有。这意味着它的静态字段被初始化并且它的静态构造函数被调用(如果有的话)。然后调用Concat()
方法,并在其运行期间所需的所有类也被初始化。
在第三行,Console
类被初始化,如果它已经没有了。当然,在执行WriteLine()
期间使用的所有类也是如此。
所有静态字段都需要一些内存,所以当你第二次调用GC.GetTotalMemory()
时,你会得到更高的数字。
答案 1 :(得分:1)
不确定,但是Console.WriteLine
正在消耗内存...这是因为一次调用它后内存值不会改变。
看看这个答案可以帮助您更详细地找到答案:High memory usage with Console.WriteLine()