Выйдет из памяти при получении растрового изображения с сервера?
-
26-09-2019 - |
Вопрос
Я делаю приложение, которое использует много изображений. Приложение получает изображения с сервера и загружает их один за раз. После многих изображений создание растрового изображения возвращает исключение, но я не знаю, как это решить. Вот моя функция для загрузки изображений:
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. Кроме того, попробуйте использовать файлы меньших размеров.