Question

Je fais une application qui utilise des images beaucoup. L'application obtient les images à partir d'un serveur, et les télécharge un à la fois. Après de nombreuses images la création d'un bitmap renvoie une exception, mais je ne sais pas comment résoudre ce problème. Voici ma fonction pour télécharger les images:

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

      }

Aide Quelqu'un peut-il me ici? Merci à l'avance!

Était-ce utile?

La solution

« Beaucoup d'images » est bien sûr étroitement associé à l'exécution de mémoire. Bitmaps peuvent obtenir gros, ils vont manger beaucoup de mémoire virtuelle non géré. Vous devrez rendre votre programme plus intelligent et stocker moins bitmaps en mémoire. Ou les enregistrer temporairement dans un fichier. Ou retéléchargement les si nécessaire. Et nettoyer correctement leurs ressources avec la méthode Dispose (), particulièrement important pour la classe Bitmap.

Autres conseils

flux que la réponse au disque plutôt que de le garder en mémoire. Ensuite, garder autour de l'information sur l'image que vous avez enregistré dans un lieu temporaire au lieu de l'image elle-même.

Si vous montrer ces tout dans un Picturebox (et en fonction de vos commentaires, je pense que vous êtes) alors vous devez disposer des vieilles images ( cette entrée de blog aide expliquer):

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

Comme une note de côté sur le style, les noms de méthode sont censés être PascalCase, pas camelCase et je voudrais perdre la notion hongroise du paramètre.

Que faites-vous avec les objets System.Drawing.Bitmap? Gardez-vous tous en mémoire? Ensuite, il est inévitable que vous aurez une exception sur la mémoire à un moment donné.

Selon vos besoins, vous devriez jeter les images à un moment donné. Si vous les avez besoin, de les stocker dans un fichier flash. Aussi, essayez d'utiliser des fichiers de petites tailles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top