DotTrace Performance Profiler [Çöp toplama] ile ne ifade ediyor?
[Çöp toplama] bu resimde ne anlama geliyor? Ve "20 çağrı" olayı? GC kadar uzun sürmesinin nedeni Yani
, nasıl anlamaya? Çok sayıda küçük nesne topluyor muydu? Tek büyük bir? Bunu nasıl optimize edeceğinize dair ipuçları var mı? Söz konusu
kodudur:
private void DeserializeFrom(SerializationInfo info)
{
Width = info.GetInt32("width");
Height = info.GetInt32("height");
var data = (List<byte>)info.GetValue("cells", typeof(List<byte>));
cells = new Cell[physicalSize.Width, physicalSize.Height];
int pos = 0;
for (int x = 0; x < physicalSize.Width; x++)
{
for (int y = 0; y < physicalSize.Height; y++)
{
cells[x, y] = new Cell();
if (x < Width && y < Height)
{
cells[x, y].HasCar = data[pos];
pos++;
}
}
}
}
Hiçbir şey çok süslü. Ben suçlu büyük List<byte>
nesnedir şüpheli ama (küçük bir grup nesne toplama yerine), büyük nesne anlık olması gerekiyordu bir single toplama düşündük.
Bu birkaç aylık fark, ama kesinlikle .net kodu bellek sızıntıları olabilir söz etmek gerekiyor hissediyorum. Statik olaylar bunun çok yaygın bir sebebidir. Geçici olan bir statik olaya abone olursanız ve geçici olarak bilinen tüm referansları yayınlamadan önce olaydan çıkmaktan vazgeçerseniz, geçiş statik olayın referansı ile canlı tutulur; çöp toplayıcı asla toplamaz. – Kelsie
@kelsie haklısın ve kendimi doğru olarak ifade etmedim. Bir nesneyi düzgün bir şekilde tahsis etmenin kolay olmadığı ve bir bellek sızıntısına sahip olmanın kolay olduğu yönetilmeyen kodla nasıl programlandığınıza dair bellek sızıntınız yoktur. Ayrıca, haklı olarak işaret ettiğin gibi, olaylar, bir nesneye atıfta bulunabilmenin bir yoludur, böylece elden çıkarılmaz. Başvurunuz LOH tahsis ve LOH sıkıştırmak değil edemeden, bellek istisnalar dışında alabilir verildi diziler kullanımında çok yoğun olunca – xmorera
Diğer bir olasılık büyük nesne yığın ile önceden 4,5 oldu. – xmorera