2013-03-19 7 views
5

Googled problemi simili, ma non sono riuscito a capire esattamente come modificare il mio codiceUn'eccezione non gestita di tipo 'System.OutOfMemoryException' si è verificato in System.Drawing.dll Ulteriori informazioni: Out of memory

Ho un elenca "immagini" che contengono circa 20 foto di 1 MB ciascuna. Voglio scorrere le immagini nell'elenco facendo clic sul pulsante successivo. Ma dopo circa 8 immagini esco di memoria

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)); 
    } 

filo ChooseColors2 utilizzerà "CurrImage", in modo da evitare condizioni di gara, ho evitato che con la creazione di una nuova bitmap come indicato sopra

Si prega di notare che se io usa pictureBox1.Image = CurrImage; senza creare una nuova mappa bit non ottengo questo errore ma ci sarà un'eccezione della condizione di gara con il thread. grazie

risposta

4

Si potrebbe provare a chiamare il seguente prima di assegnare un nuovo Bitmap per pictureBox1.Image, per rimuovere la precedente Bitmap "nuovo" e liberare risorse:

pictureBox1.Image.Dispose(); 
+3

Grazie Grant, penso che ho bisogno di leggere di più sulla memoria perdita. Quando penso che sono diventato un programmatore, mi rendo conto che sono ancora a miglia di distanza. Grazie comunque per il tuo aiuto. – Basco