OutOfMemoryException загрузка большого изображения в объект Bitmap с помощью Compact Framework

У меня проблема с утечкой памяти.

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

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

    Dim ms As New IO.MemoryStream
    Dim bm As New Bitmap("\Application Data\imgs\IMG22.jpg")
    bm.Save(ms, Drawing.Imaging.ImageFormat.Jpeg)
End Sub

Этот код прекрасно работает, когда я запускаю .exe на своем ноутбуке (я имею в виду под windows7 / 32bits с полной .net framework), но когда я запускаю приложение на устройстве с WindowsMobile 6.1, приложение выдает это исключение:

SmartDeviceProject22.exe
OutOfMemoryException

в

Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)
at
System.Drawing.Image.Save(Stream stream, ImageFormat format)
at
SmartDeviceProject22.Form1.Button3_Click(Object sender, EventArgs e)
at
....

Размер изображения составляет около 200 КБ, а ширина и высота около 1500 пикселей. Детали изображения:

Dimension: 1536x2048 Horizontal Resolution: 72dpi Horizontal Resolution: 72dpi Bit depth: 24 Resolution unit: 2 Color representation: sRGB -

Любая помощь будет по достоинству оценена.

Я пробую код @asawyer, даже удаляю ВСЕ код, ссылки и т. Д., И проблема сохраняется, я думаю, это что-то о ширине / высоте изображения или с компактной структурой.

Любой другой совет?

Solution and explanation of the problem Ну а после тестирования кое-что стало настоящей проблемой - не утечка памяти, как сказал @pdriegen - проблема с доступной памятью.

Я изменяю свой код на это (и проверено на мобильном устройстве):

 Dim fs As IO.FileStream = IO.File.OpenRead("\Application Data\ryder\IMG23.jpg")
 Dim arrb(fs.Length) As Byte     
 fs.Read(arrb, 0, arrb.Length)
 fs.Close()
 fs.Dispose()

И с кодом выше (по-видимому) я получаю byte () (массив) изображения для хранения в базе данных, используя dataSet.

В заключение: загрузка растрового объекта в memoryStream, плохая идея. Большое спасибо всем, кто нашел время, чтобы прочитать мою проблему, и особенно тем, кто публикует свой ответ.

Solution (if you need to show the image in a picture box):

Через несколько недель это, вероятно, лучшее (бесплатное) решение: Реализуйте ImageHelper, как описано здесь:ImageHelper

Этот класс / пример использует пространство имен чертежей из OpenNetCF (http://www.opennetcf.com/)

Он прекрасно работает и решает мои проблемы с памятью, загружая большие растровые изображения в память, на самом деле мы загружаем миниатюру, поэтому размер в памяти значительно уменьшается и избегается проблема исключений OutOfMemory.

About Chris Tacke Я просто понимаю, что автор поста об ImageHelper и соучредителе OpenNetCF здесь, в stackoverflow, вот его профиль:https://stackoverflow.com/users/13154/ctacke

Ответы на вопрос(2)

Ваш ответ на вопрос