以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]PictureBox内存不足  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=85183)

--  作者:nblwar
--  发布时间:2016/5/19 14:56:00
--  [求助]PictureBox内存不足
PictureBox,

Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "图像文件|*.JPG" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    Dim img As Image = GetImage(dlg.FileName)
    
    Dim pbx As WinForm.PictureBox = e.Form.Controls("PictureBox1")
    
    If img IsNot Nothing Then
        pbx.Image = img



当加载的图像文件比较大,比如我加载一个50多M的图像,重复加载几次之后,就会出现内存不足的错误,必须用360加速球加速后才能继续使用
[此贴子已经被作者于2016/5/19 15:09:49编辑过]

--  作者:nblwar
--  发布时间:2016/5/19 14:58:00
--  
而且从任务管理器里看进程,每加载一次图片,狐表进程的内存就会往上涨,却不会掉下来
--  作者:大红袍
--  发布时间:2016/5/19 15:39:00
--  

方法一:

 

Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog

If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    Dim img As getimage(dlg.FileName)  
    Dim pbx As WinForm.PictureBox = e.Form.Controls("PictureBox1")   
    If img IsNot Nothing Then
        pbx.Image = img
    End If
    GC.Collect()
End If


--  作者:大红袍
--  发布时间:2016/5/19 15:42:00
--  

方法二:

 

Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog

If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    Dim img As new bitmap(dlg.FileName)
   
    Dim pbx As WinForm.PictureBox = e.Form.Controls("PictureBox1")
   
    If img IsNot Nothing Then
        if pbx.Image isnot nothing then pbx.Image.dispose
        pbx.Image = img
    End If

End If


--  作者:nblwar
--  发布时间:2016/5/19 15:56:00
--  
方法一测试有效,方法二测试无效,谢谢
--  作者:大红袍
--  发布时间:2016/5/19 16:28:00
--  
方法二:肯定有效。每次都会把上一次的img的内存清空。如果你直接关闭窗口,你还要在beforeClose事件,清空一次
--  作者:haotinghua
--  发布时间:2019/7/18 17:50:00
--  
PictureViewer的回收方法呢
--  作者:有点蓝
--  发布时间:2019/7/19 8:30:00
--  
这个没有办法处理。可以在窗口关闭的时候调用一下GC.Collect()
--  作者:xuezxz
--  发布时间:2020/2/12 11:58:00
--  
图片点击可在新窗口打开查看