2012-06-22 38 views
6

Bir kerede çok saat çalışması gereken bir tanılama aracı yazıyoruz, ancak uygulama çalıştırıldıktan sonra bir CheckedListBox'tan öğeleri kaldırmaya çalıştığımızda gizemli bir Bellek Dışı Durum Özel Durumuna giriyoruz birkaç saat için. CheckedListBox bellek sızıntısı

Başlangıçta checkedListBox.Items.Clear(); kullanarak çalıştı ve bazı etrafında Googling sonra, bunun yerine aşağıdaki gibi bir şey denedim:

for (int i = checkedListBox.Items.Count - 1; i >= 0; i--) 
{ 
    checkedListBox.Items.RemoveAt(i); 
} 

Maalesef yukarıdaki sorunu çözmedi. MSDN forumlarında bu fikri buldum, ama hayatımın bu sabah tekrar bağlantısını bulamıyorum. Ancak, bu forum, birisinin uygulamalarını belirttiğini ve CheckedListBox.Items.Clear() numaralı telefondan bir bellek sızıntısı bulduğunu söylemiştir.

Herkesin etrafında işlevsel bir çalışma olduğunu biliyor mu?

DÜZENLEME: FingerTheCat cevabı geçici sorunumuzu çözdü vardır, bu yüzden şimdi cevap olarak işaretler. Ancak, gerçek sorunu denemek ve bulmak için kod taramaya başladık. Ne yazık ki, mevcut uygulama büyük ölçüde spagetti kodudur, bu yüzden bir şey bulamadan birkaç gün önce olabilir.

+0

İşaretli liste kutusuna ne tür öğeler ekliyorsunuz? Bu nesnelerin açık bir şekilde temizlenmesinin yanı sıra bunları liste kutusundan kaldırmaya ek olarak ('Dispose() 'işlevini çağırmak gibi) yapmanız gerekebilir. – MusiGenesis

+0

Bellek sızıntısını for döngüsüyle çözebiliyor musunuz? – Damith

+3

CheckedListBox'un bellek sızıntısına * sahip olmadığını * güvenle söyleyebiliriz. .NET performans sayaçlarını gözlemlemek ve düzenli çöp koleksiyonlarının yapıldığını kontrol etmek için Perfmon.exe aracını kullanın. Eğer değilse, uygulamanızda eksik Dispose() çağrıları için avcılık yapmanız gerekecek. –

cevap

0

Görüldüğü gibi, bir kullanıcı uygulamada bir hata ayıklama kodu parçası bırakmıştı; bu da, hiçbir zaman temizlemeden bir ArrayList'a oldukça ayrıntılı günlük bilgilerini ekliyordu. Bu kod ayrıca ArrayList'un kopyalarını kendisine ekliyordu. Kesinlikle unutmamak için iyi bir şey değil.

-2

Yapılması gereken en iyi şey, bence, kodunuzdaki bazı noktalarda GarbageCollector'ı aramaktır. Sadece GC.Collect() ekleyin; bazı döngülere yakın ve hafıza sorununuzu çözmeli.

+2

Bu kesinlikle doğru düzeltme değil. Gerçek problemi teşhis ederken GC.Collect() hala yararlı olabilir. – Henrik

+1

'GC.Collect()' ifadesi, * çözüm * değildir. –