GC.MaxGeneration屬性【GC示例】

風靈使發表於2018-06-29

獲取系統當前支援的最大代數。
名稱空間: System
程式集: mscorlib(位於 mscorlib.dll)

語法

public static int MaxGeneration { get; }

屬性值

Type: System.Int32

從零到所支援的最大代數間的一個值。

備註

生成編號或年齡,物件是物件的生命週期的實現定義的相對度量。 最新建立的物件是第 0 代中,最舊的物件是小於或等於生成返回級別MaxGeneration屬性。

垃圾回收器假定較新的記憶體是更有可能適合於較舊的記憶體比垃圾回收。 因此,垃圾回收器可以提高其效能通過調整它回收記憶體,每次的世代號和MaxGeneration屬性值可以隨時間增長。

如果實現物件老化,MaxGeneration屬性返回系統使用的最大代數; 否則,此屬性返回零。

實現函式說明:

對於此實現,返回的值MaxGeneration屬性一定正在執行的應用程式的生存期內保持不變。

使用MaxGeneration屬性來確定在呼叫時可以指定的最大值Collect採用生成引數的方法。

示例

下面的示例演示如何 MaxGeneration 屬性用於在使用中當前顯示的最大代數。

using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();
 
	   //確定系統垃圾收集器當前支援的最大代數。
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            //確定myGCCol物件儲存哪一代。
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            //確定託管記憶體中當前分配的位元組數的最佳可用近似值。
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            //僅執行第0代的收集
            GC.Collect(0);

            //確定myGCCol物件儲存哪一代。
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
 
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
 
            //進行所有世代的收集,包括2
            GC.Collect(2);

            //確定myGCCol物件儲存哪一代。
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                //建立物件並釋放它們以使用未使用的物件填充記憶體。
                vt = new Version();
            }
        }
    }
}

執行結果如圖:

在這裡插入圖片描述

相關文章