Im создание программного обеспечения для Symbol MC75A с использованием C# .net CF 2.0. Мы сканируем штрих-код, и он возвращает информацию о запасах, но я пытаюсь добавить функцию, которая получает изображение с URL-адреса. Каждое сканирование обновляет экран новыми данными из базы данных, а также получает изображение с нового URL-адреса. Он сканирует несколько штрих-кодов и возвращает, возможно, 4/5 изображений без проблем, и внезапно возникает OutOfMemoryException. Код им с помощью, чтобы получить изображение является:.net Compact Framework 2.0 - Исключение OutOfMemory При загрузке изображения
public Bitmap GetImage(string URL)
{
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
myRequest.AllowWriteStreamBuffering = false;
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
myResponse.Close();
return bmp;
}
Вызывается:
pbImage.Image = GetImage(ProductImage);
pbImage.SizeMode = PictureBoxSizeMode.StretchImage;
Я пытался избавиться от образа перед каждым новым GET с pbImage.Image.Dispose(), но по-прежнему получать тот же исключение. Размеры изображения составляют от 100 КБ до 550 КБ. Независимо от того, имеет ли значение размер изображений, они всегда превышают 1000 пикселей на каждой стороне.
У меня отсутствует правильный способ утилизации до повторного получения или каким-то образом кэшировать все эти изображения, которые затем создают исключение outofMemory?
изображения поступают во временные файлы IE. Вы можете удалить историю просмотров. Когда-нибудь использование сниффера, такого как скрипач или wirehark, может помочь изолировать проблемы при загрузке. – jdweng
Разве это всегда ломается на одном изображении? System.Drawing славится броском OutOfMem по многим другим причинам. Это можно обработать с помощью try/catch. –
Ваш 'myRespones.Close()' должен находиться в конце или в блоке использования. Вы уверены, что нет других исключений? –