【发布时间】:2011-06-18 17:24:04
【问题描述】:
我正在使用以下代码将图像作为缩略图加载到 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
更新:在加载大量图像时出现问题(3264x2448px at 300dpi - 每张图像大约为 3Mb)
【问题讨论】:
-
您是否尝试通过删除所有多余的代码并仅尝试加载图像来隔离问题?您是否尝试过将加载的图像(如果它到达那么远)分配到“正常”图像显示控件中?
-
只加载一张图片还是加载多张图片时内存不足?只是一个特定的图像给您带来麻烦,还是当您尝试加载任何图像时它会失败?图片是不是特别大?请,更多细节或我们能做的最好的就是猜测。
-
@Jim。您好,请问您可以查看更新吗?
-
@Chocol8,任何图像组都会发生这种情况,还是有 1 个特定图像导致这种情况?不幸的是,OOM 异常往往是在处理图像时经常抛出的一般错误。 (好吧,不是一般错误,而是低级错误,不会包含在更具体的错误中。)我之前遇到过这个错误,图像损坏。有时它的图像会像更大的图像一样被解压缩到内存中。 stackoverflow.com/questions/1108607/…
-
一张 3264x2448 的图像是 7,990,272 像素。如果它是 24 位颜色,那就是每像素 3 字节或每张图像大约 23 兆字节。在磁盘上压缩时它们可能只有 3 MB,但在内存中它将使用完整的未压缩大小。如果您的系统内存很少,则无法加载其中的许多内容。
标签: vb.net image image-processing memory-leaks memory-management