Не хватает памяти при получении растрового изображения с сервера? - PullRequest
0 голосов
/ 14 апреля 2010

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

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

      }

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

Ответы [ 4 ]

1 голос
/ 14 апреля 2010

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

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

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

1 голос
/ 14 апреля 2010

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

0 голосов
/ 14 апреля 2010

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

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

0 голосов
/ 14 апреля 2010

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

...