本文介绍了加载图像时内存不足异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下代码将图像作为缩略图加载到FlowLayoutPanel控件。不幸的是我得到了一个OutOfMemory异常。

I am using the following piece of code to load images as thumbnails to a FlowLayoutPanel control. Unfortunately i get an OutOfMemory exception.

正如你已经猜到的那样,内存泄漏位于行

As you already guess the memory leak is found at line

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

那我怎么能优化下面的代码?

So how could i optimize the following 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

更新:加载大量图片时出现问题(3264x2448px在300dpi - 每个图像大约是3Mb)

Update: The problem occurs while loading a number of images (3264x2448px at 300dpi - each image is about 3Mb's)

推荐答案

您可以通过几个步骤解决这个问题:

You can solve this in a few steps:


  • 为了摆脱文件依赖性,你必须复制图像。通过真正将其绘制到新的位图,您不能只是复制它。

  • 因为你想要缩略图,而你的源位图相当大,所以将它与收缩图像结合起来。

这篇关于加载图像时内存不足异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-11 01:31