次のコードを使用して、画像をサムネイルとしてFlowLayoutPanelコントロールにロードしています。残念ながら私はOutOfMemory例外が発生します。画像のロード中にメモリ不足の例外が発生しました
すでにメモリリークがライン
Pedit.Image = System.Drawing.Image.FromStream(fs)
で発見され、どのように私は次のコードを最適化することができると思い通り?
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
更新:画像の数のロード中に問題が発生した(300dpiので3264x2448pxを - 各画像は3Mbの者についてです)(あなたのFromStream
に関連している)Image.FromFile
ため
は、すべての余分なコードを削除し、画像をロードするためにだけ試みることによって、問題を特定しようとしたことがありますか?読み込まれたイメージを(それが遠くにある場合)「通常の」イメージ表示コントロールに割り当ててみましたか? –
イメージを1つだけ読み込んだり、多くのイメージを読み込んだりすると、メモリが不足していませんか?画像を読み込もうとすると、問題を引き起こす画像は1つだけですか、失敗しますか?イメージは非常に大きいですか?もっと詳しく、または私たちができることは最高だと思います。 –
@ Jim。こんにちは、更新を確認してください。 – OrElse