这是我正在玩的一个小型控制台程序,以找出我的生产应用程序消耗太多内存的原因:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
Console.WriteLine("Press key - 1"); Console.ReadLine();
var q = new Queue<string>();
for (int i = 0; i < 1000000; i++)
q.Enqueue("test string" + i);
Console.WriteLine("Press key - 2"); Console.ReadLine();
q = null;
Console.WriteLine("Press key - 3"); Console.ReadLine();
GC.Collect();
Console.WriteLine("Press key - 4"); Console.ReadLine();
GC.Collect(2);
Console.WriteLine("Press key - 5"); Console.ReadLine();
}}}
我正在运行它并在按下键的同时监视Windows任务管理器。以下是我在每个步骤的内存列中看到的内容:
从运行到运行结果略有不同(只有几Ks),但是你得到的结果。可以请某人解释这里发生了什么吗?
我的环境:.NET4(客户端配置文件),Windows 7 x64。
答案 0 :(得分:1)
您发现在将局部变量设置为null时抖动不会生成代码的原因。垃圾收集器已经知道你何时停止引用一个对象,它不需要那样的帮助。有很多关于.NET的书可以向你解释,里希特的“CLR来自C#”受到广泛赞誉。