новая битовая карта OutOfMemoryException в CF 2.0SP2 - PullRequest
0 голосов
/ 01 ноября 2009

У меня есть этот код:

if (archivoBinario != null)
{
    MemoryStream ms = new MemoryStream(archivoBinario);
    Bitmap imagen = new Bitmap(ms);
    PicBoxImagen.Image = imagen;
}

Выдает исключение System.OutOfMemoryException при создании нового растрового изображения из MemoryStream ms.

Примечание: archivoBinario - это байтовый массив с размером 9778 байт.

Я думаю, что размер памяти это не проблема. Любой совет?

Изображения отправляются на устройство службой WCF и сохраняются в базе данных SQL Server CE 3.1. Возможно, при отправке изображения может возникнуть проблема.

Я сравнил байты, представляющие изображение, сохраненное в SQL Server 2005, и изображение, сохраненное в SQL Server CE, и совпадают.

Спасибо!

Ответы [ 3 ]

1 голос
/ 01 ноября 2009

Вы должны вызвать Dispose на PicBoxImagen.Image, если перед назначением нового изображения оно не равно нулю. Если у вас нет утечки. См. эту запись в блоге для более подробного объяснения, почему ..

1 голос
/ 01 ноября 2009

Класс Image генерирует OOM практически для всего, включая недопустимый формат. Чтобы проверить свои базы, убедитесь, что это действительное изображение. Сохраните эти 9778 байт в файл и попробуйте просмотреть его (на CF и / или обычном ПК).

Но сжатое изображение размером 9 КБ может сильно взорваться, поэтому оно все равно может быть подлинным OOM.

0 голосов
/ 01 ноября 2009

Создание изображения иногда приводит к OutOfMemoryException для ресурсов, отличных от памяти (достаточно странно).

Возможно ли, что вы не утилизировали дескрипторы Windows Forms?

Другая возможность состоит в том, что у вас недостаточно памяти - например, небольшой файл все еще может представлять собой огромную картинку (например, если он всего одного цвета). Если Windows пытается создать попиксельное представление изображения в памяти, это может вызвать те же симптомы. Какого размера картинка в пикселях?

...