为什么GC会在这种情况下被触发?

时间:2013-06-05 14:31:09

标签: c# .net garbage-collection clr

我正在创建一个包含大量项目的数组(项目数> 2500)。该数组使用下面程序中描述的结构保存对象。
我观察到该过程的“在GC中花费的时间百分比”达到了很高的值。它从ArraySize = 2500开始。对于低于2500的任何事物,GC中花费的高%时间具有较低的值。 事实上即使使用ArraySize = 2499,计数器也没有显示任何增加。

表现计数器:
enter image description here
码:

namespace TestGC
{
    public class Line
    {
        private string _data1;
        private decimal _data2;
        private decimal _data3;

        public string Data1
        {
            get { return _data1; }
            set { _data1 = value; }
        }

        public decimal Data2
        {
            get { return _data2; }
            set { _data2 = value; }
        }

        public decimal Data3
        {
            get { return _data3; }
            set { _data3 = value; }
        }
        public Line()
        {
        }


    }


    public class Item
    {
        public const int Size = 200;
        private Line[] _lines = new Line[Size];

        public Line[] Lines
        {
            get { return _lines; }
            set { _lines = value; }
        }
    }

    public class Package
    {
        private Item _item;

        public Package()
        {
            _item = new Item();
            for (int i = 0; i < Item.Size; i++)
            {
                _item.Lines[i] = new Line();
            }
        }

        public Item Item
        {
            get { return _item; }
            set { _item = value; }
        }

    }

    class Program
    {
        private const int ArraySize = 2500;
        static Package[] array = new Package[ArraySize];
        static void Main(string[] args)
        {           
            Console.ReadLine();

            for (int i = 0; i < ArraySize; i++)
            {
                array[i] = new Package();
            }

            Console.ReadLine();
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

GC可能正在重新分配内容。这是一些预期的行为。我建议阅读Large Object Heap