2010-09-01 18 views
5

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.

cevap

1

Partiye biraz geç ama eğer kullanıyorsanız .Net'i kullanırsanız, temelde .Net çalışma zamanının nesnelerinizde buna uygun olduğunu belirtmesi için C veya C++ yerine bellek sızıntısı olmaması anlamına gelen yönetilen kod kullanırsınız. . Çalışma zamanı uygulaması için tahsis ve bellek serbest bırakılmasını yönetmek için bir zaman alır zaman

Çöp Toplama olduğunu. Bu durumda gerçekleşen şey budur.

çöp toplama analiz etmek ve sizin yürütme engelliyor olabileceğini belirlemek, böylece doTrace (ı sürüm 6 var) ile kullanılabilen bu filtrenin bir göz atın lütfen. https://www.jetbrains.com/profiler/help/CLR_Activity.html

+0

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

+0

@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

+0

Diğer bir olasılık büyük nesne yığın ile önceden 4,5 oldu. – xmorera