2013-06-05 2 views
0

많은 수의 항목 (항목 수> 2500)을 가진 배열을 생성하고 있습니다. 배열은 아래 프로그램에 묘사 된 구조로 객체를 보유합니다.
프로세스가 급증하여 "GC에서 소요 된 시간 (%)"이 높게 나타남을 발견했습니다. 값이 ArraySize = 2500부터 시작됩니다. 이 값이 2500 미만인 경우 GC에서 보낸 시간의 값은 낮습니다. 실제로 ArraySize = 2499 인 경우에도 카운터에 증가가 표시되지 않습니다.

성능 카운터 :
enter image description here
코드 : GC 아마 주위에 물건을 재 할당됩니다
이 상황에서 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 개체를 할당하는 데 매우 짧은 시간이 걸립니다. 그렇다면이 컨텍스트에서 "전체 앱 런타임의 상대적 비율"이 높습니다 . 같은 사용량으로 더 오래 걸리는 더 좋은 예가 있습니까? –

답변

관련 문제