OutOfMemoryException carregando uma imagem grande no objeto Bitmap com o Compact Framework

Eu tenho um problema com um vazamento de memória.

Eu tenho esse código em umbutton_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

Este código funciona muito bem quando eu estou executando o .exe no meu laptop (eu quero dizer em windows7 / 32bits com o framework completo .net), mas quando eu executar o aplicativo em um dispositivo com o WindowsMobile 6.1 o aplicativo lança essa exceção:

SmartDeviceProject22.exe
OutOfMemoryException

a

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
....

O tamanho da imagem é de cerca de 200kb e a largura e altura em torno de 1500px. Detalhes da imagem:

Dimensão: 1536x2048Resolução Horizontal: 72dpiResolução Horizontal: 72dpiProfundidade de bits: 24Unidade de resolução: 2Representação de cores: sRGB -

Qualquer ajuda será muito apreciada.

Eu tento o código do @asawyer até mesmo remover TODO o código, referência, etc e o problema persistir, acho que é algo sobre a largura / altura da imagem ou com o framework compacto.

Algum outro conselho?

Solução e explicação do problema Bem, depois de testar algumas coisas, o problema real não era um vazamento de memória, assim como @pdriegen disse que é um problema de memória disponível.

Eu mudo meu código para isso (e testado no dispositivo móvel):

 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()

E com o código acima (aparentemente) eu recebo um byte () (array) da imagem para armazenar no banco de dados usando dataSet.

Em conclusão: carregar um objeto de bitmap para memoryStream, má ideia. Muito obrigado a todos que dedicam tempo a ler o meu problema e, especialmente, aqueles que publicam a sua resposta.

Solução (se você precisar mostrar a imagem em uma caixa de imagem):

Depois de algumas semanas, esta é provavelmente a melhor solução (de graça): Implemente um ImageHelper como explicado aqui:ImageHelper

Esta classe / amostra usa o Drawing NameSpace do OpenNetCF (http://www.opennetcf.com/)

Ele funciona muito bem e resolve os problemas de memória que carregam grandes bitmaps na memória. Na verdade, carregamos uma miniatura, portanto, o tamanho da memória é reduzido consideravelmente e evitamos o problema de exceção OutOfMemory.

Sobre Chris Tacke Acabei de perceber que o autor do post sobre ImageHelper e co-fundador do OpenNetCF está aqui no stackoverflow, aqui está o perfil dele:https://stackoverflow.com/users/13154/ctacke

questionAnswers(2)

yourAnswerToTheQuestion