0
我正在创建一个包含大量项目的数组(项目数> 2500)。该数组保存具有以下程序中描述的结构的对象。
我观察到过程中的“GC时间花费%”激增到很高的值。它始于ArraySize = 2500
的值。对于低于2500的任何情况,在GC中花费的高%时间具有较低的价值。 事实上,即使ArraySize = 2499,计数器也没有显示任何增加。
性能计数器:
代码:
为什么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个对象所需的时间非常短,所以在这种情况下,“总应用运行时的相对百分比”将会很高。你有更好的例子,需要更长的时间,同样的高使用率? –