Я создаю приложение Silverlight 4, которое должно отображать эскизы изображений перед их загрузкой на сервер. Код, который у меня есть, прекрасно работает для изображений размером до 15 МБ, но когда я пытаюсь открыть большие изображения (некоторые размером более 30 МБ), я получаю следующее исключение:
Insufficient memory to continue the execution of the program.
Ошибка довольно очевидна, однако мой вопрос ... есть ли альтернативный способ открытия больших изображений или увеличения памяти, доступной для приложения Silverlight?
Я тестирую это на машине с 8 ГБ ОЗУ, и когда я проверяю, что процесс IE, на котором размещается память приложения, достигает пика около 250 МБ, а затем выдает исключение, поэтому вполне безопасно предположить, что на моей машине не хватает памяти. 1008 *
Код, который я использую для открытия полного изображения, выглядит следующим образом, хотя я опустил код для создания уменьшенных миниатюр, так как в настоящее время он никогда не заходит так далеко с большими изображениями:
private BitmapImage OpenImage(Stream stream)
{
byte[] fullRead = this.ReadFully(stream);
MemoryStream ms = new MemoryStream(fullRead);
BitmapImage bi = new BitmapImage();
bi.SetSource(ms);
return bi;
}
private byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[input.Length];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}