Открытие больших изображений с помощью BitmapImage.SetSource - Недостаточное исключение памяти - PullRequest
0 голосов
/ 07 ноября 2011

Я создаю приложение 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();
        }
 }

1 Ответ

2 голосов
/ 07 ноября 2011

У вас либо недостаточно памяти (помните, что Silverlight находится в песочнице) и / или ресурсы (т. Е. Дескрипторы или аналогичные).

Проверьте это для решения проблемы, которую вы описываете, включая исходный код и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...