0

多数のアイテム (アイテム数 > 2500) を含む配列を作成しています。配列は、以下のプログラムに示されている構造を持つオブジェクトを保持します。
プロセスの「GC での %Time 支出」が高い値に急増することを確認しました。の値から始まりますArraySize = 2500。2500 未満の場合、GC で費やされた高い %time の値は低くなります。実際、ArraySize=2499 を使用しても、カウンターは増加を示しません。

パフォーマンス カウンター:
ここに画像の説明を入力
コード:

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();
        }
    }
}
4

1 に答える 1

-1

GC はおそらく何かを再割り当てしています。これは予想される動作です。Large Object Heapについて読むことをお勧めします。

于 2013-06-05T14:39:59.457 に答える