Выйдет из памяти при получении растрового изображения с сервера?

StackOverflow https://stackoverflow.com/questions/2637073

Вопрос

Я делаю приложение, которое использует много изображений. Приложение получает изображения с сервера и загружает их один за раз. После многих изображений создание растрового изображения возвращает исключение, но я не знаю, как это решить. Вот моя функция для загрузки изображений:

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

      }

Может кто-нибудь помочь мне здесь? Заранее спасибо!

Это было полезно?

Решение

«Многие изображения», конечно, тесно связаны с запуском памяти. Ратушки могут получить большие, они съест много неуправляемой виртуальной памяти. Вам придется сделать вашу программу умнее и хранить меньшие растровые изображения в памяти. Или сохранить их временно в файл. Или перезагрузить их при необходимости. И правильно очистить свои ресурсы с помощью метода Dispose (), особенно важным для класса Bitmap.

Другие советы

Поток, который отвечает на диск, а не держать его в памяти. Затем сохраните информацию о изображении, которое вы сохранили во временном месте вместо самого изображения.

Если вы показываете все это в iPlicobole (и на основании ваших комментариев, я думаю, вы находитесь), то вы должны выбрать старые изображения (Это вход в блоге Помогает объяснить это):

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

В качестве бокового примечания к стилю имена методов должны быть Pascalcase, а не камерзадами, и я потерял венгерское понятие на параметре.

Что вы делаете с System.drawing.bittmap объекты? Вы держите всех в памяти? Тогда неизбежно, что вы получите выход из памяти в какой-то момент.

Основываясь на ваших потребностях, вы должны отбросить изображения в какой-то момент. Если вы нуждаетесь в них, храните их в файле в Flash. Кроме того, попробуйте использовать файлы меньших размеров.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top