0
많은 수의 항목 (항목 수> 2500)을 가진 배열을 생성하고 있습니다. 배열은 아래 프로그램에 묘사 된 구조로 객체를 보유합니다.
프로세스가 급증하여 "GC에서 소요 된 시간 (%)"이 높게 나타남을 발견했습니다. 값이 ArraySize = 2500
부터 시작됩니다. 이 값이 2500 미만인 경우 GC에서 보낸 시간의 값은 낮습니다. 실제로 ArraySize = 2499 인 경우에도 카운터에 증가가 표시되지 않습니다.
성능 카운터 :
코드 : 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();
}
}
}
실제로, 그렇지만 적절한 질문은 무엇입니까? – Renan
왜이 동작입니까? GC가 실행되는 이유는 무엇입니까? – Ngm
백분율을 언급하는 경우 프로그램에서 아무 것도하지 않으면 2500 개체를 할당하는 데 매우 짧은 시간이 걸립니다. 그렇다면이 컨텍스트에서 "전체 앱 런타임의 상대적 비율"이 높습니다 . 같은 사용량으로 더 오래 걸리는 더 좋은 예가 있습니까? –