msdn中的解释
GC.Collect (Int32)  强制对零代到指定代进行垃圾回收。 GC.MaxGeneration  系统支持的最大代数这个都是指什么意思?

解决方案 »

  1.   

    在测试GetGeneration()方法的时候发现一个问题,背景如下:两个类FirstClass和SomeClassFirstClass{       private int MaxLine = 1000;       ~FirstClass()          {       }       // 这个函数将不能通过编译       // protected override void Finalize()       // {                       //     MaxLine = 0;       // }       public void GenerateSomeRubbish()       {              string strMM;              for(int i=0;i<MaxLine;i++)              {                     strMM = new string('a',MaxLine);              }       }}public class SomeClass{       public SomeClass()       {       }       public void sameToUp()       {              string str;              for(int i=0;i<10;i++)              {                      str = new string('a',10);              }       }}在一个Main中测试GC.GetGeneration()方法。FirstClass fObj = new FirstClass();SomeClass  sObj = new SomeClass();1、fObj.GenerateSomeRubbish();2、sObj.sameToUp();GC.GetGeneration(fObj);//返回2GC.GetGeneration(sObj);//返回2 如果屏蔽1、两个都返回0,如果屏蔽2、两个都返回2如果都屏蔽,都返回0。 在上边的Code中,FirstClass和SomeClass并没有很大的区别。表面上来看,其实都是产生一堆新的字符串对象而已,在寻找原因…….1、难道是因为有个析构函数,后来发现删除后也没有关系。2、难道是因为定义了一个局部的变量MaxLine,改动后也不是。3、莫非是MaxLine的大小有影响?我就把MaxLine改成了100,重新执行GC.GetGeneration(fObj),发现返回的是1,看来确实就是了。这就有趣了,那就测试一下所有的大小了J System.IO.StreamWriter sw = new System.IO.StreamWriter(@"d:\kkk.txt");for(int i=0; i< 10000; i++){       fObj.GenerateSomeRubbish(i);//这里改动了GenerateSomeRubbish,只是增加一个参数       sw.Write(i.ToString()+"\t");       sw.WriteLine(GC.GetGeneration(fObj));} 哈哈,结果如下数字
     代数
     
    0
     0
     
    1
     0
     
    2
     0
     
    .....
      
     
    48
     0
     
    49
     0
     
    50
     1
     
    51
     1
     
    ....
      
     
    485
     1
     
    486
     1
     
    487
     2
     
    488
     2
      不知道为什么?为什么会产生代数不相同的情况?难道是微软的.net Framework规定了第1代的垃圾数量是50个,然后第2代的垃圾是427个,第三代的垃圾就不限制了?
      

  2.   

    http://koffer.cnblogs.com/aspring?page=16