2013-03-19 14 views
5

Mam google podobne problemy, ale nie mógł dokładnie dowiedzieć się, jak zmienić mój kodnieobsługiwany wyjątek typu „System.OutOfMemoryException” wystąpił w System.Drawing.dll Dodatkowe informacje: Out of memory

mam listę "obrazów", która zawiera około 20 zdjęć o wielkości około 1 MB. Chcę przewijać obrazy na liście, klikając następny przycisk. Ale po około 8 zdjęć wyjdę pamięci

private void button4_Click(object sender, EventArgs e) //next 
    { 
     index++; 
     if (index >= images.Count) index = 0; 
     CurrImage = images[index]; 
     Bitmap b = new Bitmap((Bitmap)CurrImage.Clone()); //breakpoint occurs her 
     pictureBox1.Image = b; 

     NewThread = new Thread(new ThreadStart(ChooseColors2)); 
    } 

ChooseColors2 wątek będzie używać „CurrImage” tak, aby uniknąć warunków wyścigu, unikałem że tworząc nową bitmapę, jak pokazano powyżej

Należy pamiętać, że jeśli użyj pictureBox1.Image = CurrImage; bez tworzenia nowej mapy bitowej Nie otrzymam tego błędu, ale wystąpi wyjątek warunków wyścigu z wątkiem. Dzięki

Odpowiedz

4

Można spróbować wywoływania następujących przed przypisaniem nowej bitmapy do pictureBox1.Image, aby usunąć poprzedni „nowy” Bitmap i zwolnić zasoby:

pictureBox1.Image.Dispose(); 
+3

Dzięki Grant, myślę, że trzeba przeczytać więcej o pamięci nieszczelność. Kiedykolwiek myślę, że stałem się programistą, wtedy uświadamiam sobie, że wciąż jestem daleko. Mimo to dzięki za pomoc. – Basco

Powiązane problemy