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ıçtacheckedListBox.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.
İş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
Bellek sızıntısını for döngüsüyle çözebiliyor musunuz? – Damith
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. –