Domanda

sto facendo un programma che utilizza le immagini MOLTI. L'applicazione riceve le immagini da un server, e li scarica uno alla volta. Dopo molte immagini la creazione di una bitmap restituisce un'eccezione, ma non so come risolvere questo. Qui è la mia funzione per scaricare le immagini:

 public static Bitmap getImageFromWholeURL(String sURL)
    {

        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(sURL);
        myRequest.Method = "GET";


        // If it does not exist anything on the url, then return null
        try
        {
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
            myResponse.Close();
            return bmp;
        }
        catch (Exception e)
        {
            return null;
        }

      }

Qualcuno può darmi una mano qui? Grazie in anticipo!

È stato utile?

Soluzione

"Molte immagini" è naturalmente strettamente associata a corto di memoria. Bitmap possono ottenere grandi, faranno mangiare un sacco di memoria virtuale non gestita. Dovrete rendere il vostro programma più intelligente e memorizzare meno bitmap in memoria. O salvarli temporaneamente in un file. O ri-scaricarli, se necessario. E adeguatamente ripulire le loro risorse con il metodo Dispose (), particolarmente importante per la classe Bitmap.

Altri suggerimenti

stream che la risposta su disco, piuttosto che tenerlo in memoria. Poi mantenere intorno le informazioni circa l'immagine che hai salvato in un posto temporaneo, anziché dell'immagine stessa.

Se si sta mostrando tutti questi in un Picturebox (e sulla base di osservazioni penso che tu sia), allora si devono eliminare le vecchie immagini ( questo blog aiuta a spiegarlo):

if(myPictureBox.Image != null)
{
    myPictureBox.Image.Dispose();
}
myPictureBox.Image = getImageFromWholeURL(url);

Come nota a margine su stile, i nomi dei metodi si suppone siano PascalCase, non camelCase e avrei perso la nozione ungherese sul parametro.

Che cosa fate con gli oggetti System.Drawing.Bitmap? Si fa a tenere tutti in memoria? Poi è inevitabile che si otterrà un'eccezione di memoria ad un certo punto.

In base alle vostre necessità si dovrebbe scartare le immagini ad un certo punto. Se ne hanno bisogno, conservarli in un file in flash. Inoltre, provare a utilizzare i file di dimensioni più piccole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top