Pregunta

Estoy haciendo una aplicación que utiliza imágenes de muchos. La aplicación obtiene las imágenes de un servidor, y los descarga a uno por vez. Después de muchas imágenes de la creación de un mapa de bits devuelve una excepción, pero no sabe cómo resolver esto. Aquí está mi función para la descarga de las imágenes:

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

      }

Puede alguien ayudarme aquí? Gracias de antemano!

¿Fue útil?

Solución

"Muchas de las imágenes" es, por supuesto, estrechamente asociado con el funcionamiento de memoria. Los mapas de bits pueden obtener grandes, que van a comer una gran cantidad de memoria virtual no administrado. Vas a tener que hacer su programa más inteligente y almacenar menos mapas de bits en la memoria. O guardarlos temporalmente en un archivo. O volver a descargar si es necesario. Y limpiar adecuadamente sus recursos con el método Dispose (), especialmente importante para la clase de mapa de bits.

Otros consejos

Corriente de que la respuesta en el disco en lugar de mantenerlo en la memoria. A continuación, mantener en torno a la información sobre la imagen que ha guardado a un lugar temporal en lugar de la propia imagen.

Si usted está mostrando todos éstos en un Cuadro de imagen (y en base a sus comentarios que creo que eres), entonces usted debe deshacerse de las viejas imágenes ( esta entrada del blog que ayuda a explicar):

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

Como nota al margen en el estilo, nombres de métodos se supone que son PascalCase, no camelCase y que iba a perder la noción húngaro en el parámetro.

¿Qué se hace con los objetos System.Drawing.Bitmap? ¿Mantiene todos ellos en la memoria? Entonces es inevitable que obtendrá una excepción de memoria insuficiente en algún momento.

En función de sus necesidades se debe descartar las imágenes en algún momento. Si los necesita, almacenarlos en un archivo flash. Además, trate de usar archivos de tamaños más pequeños.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top