标题:内存不足的问题
只看楼主
smy727
Rank: 2
等 级:论坛游民
帖 子:95
专家分:20
注 册:2012-1-20
结帖率:75%
已结贴  问题点数:20 回复次数:10 
内存不足的问题
数据库字段绑定到textbox控件,PictureBox控件显示textbox为路径的图片,导航条显示前后移动N条记录后,显示错误“内存不足”,怎么解决?
搜索更多相关主题的帖子: 数据库 图片 记录 
2013-06-08 12:54
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
这种情况一般并不是由机器本身的“内存不足”引起。常见于Image.FromFile后面跟的参数不是正确的图片地址,或者图片地址根本不存在而引起的
1、尝试在Image.FromFile之前,清空下图片:PictureBox1.Image = Nothing,然后再PictureBox1.Image = Image.FromFile(.....)
2、保证Image.FromFile后面跟的参数filename是个正确的图片文件的地址。
象楼主PictureBox控件显示textbox为路径的图片,应当防止textbox显示路径的值为空或是一个不存在的路径。

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2013-06-08 13:36
smy727
Rank: 2
等 级:论坛游民
帖 子:95
专家分:20
注 册:2012-1-20
得分:0 
我是这样做的:
程序代码:
   Private Sub TextBox23_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox23.TextChanged
        PictureBox2.Image = Nothing
        If TextBox23.Text <> Nothing Then
            If Not ((TextBox23.Text)) Then
                MessageBox.Show("找不到文件;" & TextBox23.Text)
                TextBox23.Text = "d:\数据库\空白文件.jpg"
            End If
            PictureBox2.Image = Image.FromFile(TextBox23.Text)
        Else
            PictureBox2.Image = Nothing
        End If
    End Sub
数据库记录移动到大约100个记录以后就出现错误,停到这一行
PictureBox2.Image = Image.FromFile(TextBox23.Text)

2013-06-08 16:42
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
从你贴出的代码来看是没有问题的,也应当排除与机器配置的关系。
你可以这样做:使用TRY模块拦截错误,或者在调试中断时添加一行:
msgbox(textbox23.text)
看看所传的值指的是哪一个图片文件。然后新建一个项目单独测试picturebox加载该图片文件是否会引发此错误。

既然代码已能执行到这一句,说明该文件是存在的有效文件。
分析认为是该值指向的图片文件不是有效的图像格式文件的可能性大。,或者如果GDI+不支持文件的像素格式,则此方法将引发OutOfMemoryException异常

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2013-06-08 17:59
smy727
Rank: 2
等 级:论坛游民
帖 子:95
专家分:20
注 册:2012-1-20
得分:0 
问题还是存在,我都试过了,应该不是图片文件的原因,直接定位到出现错误的记录是图片加载正常。
加TRY后出现下面的错误:
2013-06-09 12:02
smy727
Rank: 2
等 级:论坛游民
帖 子:95
专家分:20
注 册:2012-1-20
得分:0 
这样测试了下:
1、打开程序、显示textbox路径下的目标图片文件后定位其它图片文件
2、替换textbox路径下的目标图片文件时(同文件名)系统提示“此文件已在其它程序中打开”
所以本人以为既然PictureBox显示的不是这个文件可是内存中还存在。
2013-06-09 12:18
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
你能够让我重现你的错误么?
或者你尝试将PictureBox2.Image = Image.FromFile(TextBox23.Text)的代码写到导航条的某个事件中。

[ 本帖最后由 不说也罢 于 2013-6-9 17:51 编辑 ]

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2013-06-09 17:46
smy727
Rank: 2
等 级:论坛游民
帖 子:95
专家分:20
注 册:2012-1-20
得分:0 
我都试过了
2013-06-13 12:14
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:14 
既然你都测试过了,看来你写的代码应当不可能有问题的了。我又不能重现你的问题,此贴就讨论到这里吧。
你还可以以.net picturebox 内存不足作关键词,在网上搜寻其它可能解决你问题的办法

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2013-06-13 12:28
吾心无待
Rank: 2
等 级:论坛游民
帖 子:8
专家分:11
注 册:2013-6-20
得分:0 
代码并没逻辑错误,只是Image.FromFile(TextBox23.Text)被调用多次产生的图片占用的内存没被释放,PictureBox的Image属性不断指向新产生的图像实例。程序不关闭内存占用爆增。没事多写几个强制垃圾回收GC.Collect对占内存的程序有好处
2013-06-20 20:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-414799-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.540602 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved