2013-06-05 52 views
0

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

性能计数器:
enter image description here
代码:
为什么GC在这种情况下被触发?

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

确实,但问题是什么? – Renan

+0

这是为什么? GC为什么被触发? – Ngm

+2

如果你指的是一个百分比,你的程序没有做任何事情,分配这2500个对象所需的时间非常短,所以在这种情况下,“总应用运行时的相对百分比”将会很高。你有更好的例子,需要更长的时间,同样的高使用率? –

回答

-1

的GC可能是重新分配各地的东西。这是一些预期的行为。我建议阅读有关Large Object Heap

相关问题