OutOfMemoryException ładuje duży obraz do obiektu Bitmap za pomocą Compact Framework

Mam problem z wyciekiem pamięci.

Mam ten kod wbutton_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

Ten kod działa dobrze, gdy uruchamiam plik .exe na moim laptopie (mam na myśli system Windows7 / 32bits z pełną strukturą .net), ale gdy uruchomię aplikację w urządzeniu z WindowsMobile 6.1, aplikacja zgłasza ten wyjątek:

SmartDeviceProject22.exe
OutOfMemoryException

w

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

Rozmiar obrazu wynosi około 200kb, a szerokość i wysokość około 1500px. Szczegóły zdjęcia:

Wymiar: 1536x2048Rozdzielczość pozioma: 72 dpiRozdzielczość pozioma: 72 dpiGłębia bitowa: 24Jednostka rozdzielczości: 2Reprezentacja kolorów: sRGB -

Każda pomoc będzie naprawdę doceniana.

Wypróbowuję kod @asawyer, nawet usuwam WSZYSTKIE kody, odnośniki itp. I problem pozostaje, myślę, że jest to coś o szerokości / wysokości obrazu lub zwartej strukturze.

Jakieś inne porady?

Rozwiązanie i wyjaśnienie problemu Cóż, po przetestowaniu rzeczy prawdziwy problem nie był przeciekiem pamięci, tak jak @pdriegen powiedział, że jest problem z pamięcią.

Zmieniam swój kod na ten (i testowałem na urządzeniu mobilnym):

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

A przy powyższym kodzie (najwyraźniej) otrzymuję bajt () (tablicę) obrazu do przechowywania w bazie danych przy użyciu dataSet.

Podsumowując: załaduj obiekt bitmapowy do memoryStream, zły pomysł. Bardzo dziękuję wszystkim, którzy poświęcają swój czas na zapoznanie się z moim problemem, a szczególnie tym, którzy zamieszczają odpowiedź.

Rozwiązanie (jeśli chcesz pokazać obraz w ramce graficznej):

Po kilku tygodniach to prawdopodobnie najlepsze (za darmo) rozwiązanie: Zaimplementuj ImageHelper, jak wyjaśniono tutaj:ImageHelper

Ta klasa / próbka korzysta z Drawing NameSpace z OpenNetCF (http://www.opennetcf.com/)

Działa świetnie i rozwiązuje moje problemy z pamięcią, ładując duże bitmapy do pamięci, właściwie ładujemy miniaturę, więc rozmiar pamięci jest znacznie zredukowany i unikamy problemu wyjątku OutOfMemory.

O Chris Tacke Po prostu zdaję sobie sprawę, że autor postu o ImageHelper i współzałożyciel OpenNetCF jest tutaj w stackoverflow, oto jego profil:https://stackoverflow.com/users/13154/ctacke

questionAnswers(2)

yourAnswerToTheQuestion