Out-of-memory-Ausnahme beim laden von Bildern

Ich bin mit dem folgenden Stück code für das laden von Bildern als Miniaturansichten auf einem FlowLayoutPanel-Steuerelement. Leider bekomme ich eine OutOfMemory-exception.

Als Sie schon erraten, der Speicher Leck ist gefunden in Zeile

 Pedit.Image = System.Drawing.Image.FromStream(fs)

Also wie könnte ich es optimieren Sie den folgenden code?

 Private Sub LoadImagesCommon(ByVal FlowPanel As FlowLayoutPanel, ByVal fi As FileInfo)
        Pedit = New DevExpress.XtraEditors.PictureEdit
        Pedit.Width = txtIconsWidth.EditValue
        Pedit.Height = Pedit.Width / (4 / 3)
        Dim fs As System.IO.FileStream
        fs = New System.IO.FileStream(fi.FullName, IO.FileMode.Open, IO.FileAccess.Read)
        Pedit.Image = System.Drawing.Image.FromStream(fs)
        fs.Close()
        fs.Dispose()
        Pedit.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Zoom

        If FlowPanel Is flowR Then
            AddHandler Pedit.MouseClick, AddressOf Pedit_MouseClick
            AddHandler Pedit.MouseEnter, AddressOf Pedit_MouseEnter
            AddHandler Pedit.MouseLeave, AddressOf Pedit_MouseLeave
        End If

        FlowPanel.Controls.Add(Pedit)
    End Sub

Update: Das problem tritt auf, wenn beim laden eine Reihe von Bildern (3264x2448px bei 300 dpi - jedes Bild ist über 3Mb)

Haben Sie versucht, die Isolierung des Problems durch die Beseitigung aller überflüssigen code und versucht nur das image laden? Sie haben versucht, die Zuordnung der geladenen Bild (wenn es soweit kommt) in einem 'normalen' Bild-display-Steuerung?
Tun Sie run out of memory beim laden nur ein Bild, oder nach vielen Bildern? Es ist nur ein bestimmtes Bild, das gibt Ihnen Probleme, oder scheitert es, wenn Sie versuchen, laden Sie eine beliebige Bild? Sind die Bilder außergewöhnlich groß ist? Bitte, mehr Details und das beste, das wir tun können, ist zu erraten.
Hallo, könnten Sie bitte das update?
geschieht dies für jede Gruppe von Bildern oder ist es 1 bestimmtes Bild, das ist die Ursache HIERFÜR? Leider ist der OOM-Ausnahme eher eine Allgemeine Fehlermeldung, die geworfen erhält oft beim Umgang mit Bildern. (Ok, ist kein allgemeiner Fehler, sondern ein low-level-Fehler, die nicht bekommen, verpackt in einem mehr spezifischen Fehler.) Ich habe über diesen Fehler, bevor Sie mit korrupten Bildern. Manchmal sind seine Bilder werden unkomprimiert in den Speicher, da viel größere Bilder. stackoverflow.com/questions/1108607/...
Ein Bild von 3264x2448 ist 7,990,272 Pixel. Wenn Sie 24-bit-Farbe, die 3 byte pro pixel oder etwa 23 Megabyte pro Bild. Sie könnten nur 3 MB, komprimiert auf der Festplatte, sondern im Arbeitsspeicher, es wird die volle unkomprimierte Größe. Sie können nicht laden, viele von denen, wenn Sie ein system mit wenig Speicher.

InformationsquelleAutor OrElse | 2011-01-31

Schreibe einen Kommentar