Pergunta

Estou fazendo um aplicativo que usa muitas imagens. O aplicativo obtém as imagens de um servidor e as baixa uma de cada vez. Depois de muitas imagens, a criação de um bitmap retorna uma exceção, mas não sei como resolver isso. Aqui está minha função para baixar as imagens:

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

      }

Alguém pode me ajudar aqui? Desde já, obrigado!

Foi útil?

Solução

"Muitas imagens" está, obviamente, intimamente associado à falta de memória. Os bitmaps podem ficar grandes, eles consomem muita memória virtual não gerenciada. Você terá que tornar seu programa mais inteligente e armazenar menos bitmaps na memória. Ou salvá -los temporariamente em um arquivo. Ou faça o download novamente, se necessário. E limpe adequadamente seus recursos com o método Dispose (), especialmente importante para a classe Bitmap.

Outras dicas

Transmita essa resposta ao disco em vez de mantê -lo na memória. Em seguida, mantenha as informações sobre a imagem que você salvou em um local temporário, em vez da própria imagem.

Se você está mostrando tudo isso em uma caixa de imagem (e com base em seus comentários, acho que você é), então você deve descartar as imagens antigas (esta entrada do blog ajuda a explicar):

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

Como nota lateral sobre estilo, os nomes de métodos devem ser PascalCase, não Camelcase e eu perderia a noção húngara no parâmetro.

O que você faz com o sistema.drawing.bitmap objetos? Você mantém todos eles na memória? É inevitável que você tenha uma exceção fora da memória em algum momento.

Com base em suas necessidades, você deve descartar as imagens em algum momento. Se você precisar deles, armazene -os em um arquivo no Flash. Além disso, tente usar arquivos de tamanhos menores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top