GDI+位图使用完毕后Dispose没有完全对对象进行销毁为何?

hahatzq 2013-01-15 01:51:20
    progressBar1.Maximum = images.Count;
foreach (string image in images)
{
progressBar1.Value = progressBar1.Value + 1;

using (Bitmap Temp = new Bitmap(Image.FromFile(image)))
{
using (Bitmap narTemp = new Bitmap(imageList1.ImageSize.Width, imageList1.ImageSize.Height))
{
using (Graphics g = Graphics.FromImage(narTemp))
{

//Picsize = FitSize(Temp.Width, Temp.Height, narTemp.Width, narTemp.Height);
////Point tempxy;
////tempxy = PointXY(Picsize, narTemp.Width, narTemp.Height);
//g.DrawImage(Temp, 0, 0, (int)(Temp.Width * Picsize.fitsize), (int)(Temp.Height * Picsize.fitsize));
//g.Dispose();
//imageList1.Images.Add(narTemp);
g.Dispose();
}
narTemp.Dispose();

}
Temp.Dispose();
}

}
images.Clear();

为何会造成内存泄露啊 dispose 没有完全销毁啊 求各位大大解答下。。。。
...全文
415 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
猴头 2013-01-16
  • 打赏
  • 举报
回复
引用 19 楼 hahatzq 的回复:
引用 16 楼 fkuewfnh 的回复:引用 9 楼 hahatzq 的回复: 引用 6 楼 fkuewfnh 的回复:我想会不会是你图片的原因?加载两加小的图片试试?图片均不超过1200*1800 这图片,过多的话肯定还是会溺出的,我控件的图片都是QQ头像的大小,至于你所问的解决方案,我只能说还没有解决,前些天忙着写项目,然后这几天上头需求不停的改····闲下……
判断是不是 合格的 image图片,找一找 有没有静态方法判断方式,我的习惯是加载trycatch
猴头 2013-01-16
  • 打赏
  • 举报
回复
引用 7 楼 hahatzq 的回复:
引用 4 楼 gxingmin 的回复:引用 2 楼 hahatzq 的回复: 引用 1 楼 gxingmin 的回复:怎么看出有内存泄漏? 你用using块了,其实就不需要再给using块的对象Dispose了 系统会自动回收 任务管理器 执行过程前后的内存占用量 我只调用了这段代码 这跟内存泄漏 没关系,处理大量图像会占用内存,等会儿就会下去的 你……
负面影响 我觉得就是 他也耗费资源
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 16 楼 fkuewfnh 的回复:
引用 9 楼 hahatzq 的回复: 引用 6 楼 fkuewfnh 的回复:我想会不会是你图片的原因?加载两加小的图片试试?图片均不超过1200*1800 这图片,过多的话肯定还是会溺出的,我控件的图片都是QQ头像的大小,至于你所问的解决方案,我只能说还没有解决,前些天忙着写项目,然后这几天上头需求不停的改····闲下来的时候已经没心思写代码了。。。 如果条件允许的情况下,你可以……
现在也不是读的多少问题 是读一些没有图像预览的bmp文件就会造成内存不足的问题 请问这样的情况怎么解决呢?
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 17 楼 gxingmin 的回复:
引用 15 楼 hahatzq 的回复: 引用 4 楼 gxingmin 的回复:引用 2 楼 hahatzq 的回复: 引用 1 楼 gxingmin 的回复:怎么看出有内存泄漏? 你用using块了,其实就不需要再给using块的对象Dispose了 系统会自动回收 任务管理器 执行过程前后的内存占用量 我只调用了这段代码 这跟内存泄漏 没关系,处理大量图像会占用内存,等会……
怎么判断是否是坏的?
gxingmin 2013-01-15
  • 打赏
  • 举报
回复
引用 15 楼 hahatzq 的回复:
引用 4 楼 gxingmin 的回复:引用 2 楼 hahatzq 的回复: 引用 1 楼 gxingmin 的回复:怎么看出有内存泄漏? 你用using块了,其实就不需要再给using块的对象Dispose了 系统会自动回收 任务管理器 执行过程前后的内存占用量 我只调用了这段代码 这跟内存泄漏 没关系,处理大量图像会占用内存,等会儿就会下去的 你……
bmp类型的文件你先用BinaryReader读下,判断是不是坏的,把坏的bmp先删了,再用image
葡萄成熟时 2013-01-15
  • 打赏
  • 举报
回复
引用 9 楼 hahatzq 的回复:
引用 6 楼 fkuewfnh 的回复:我想会不会是你图片的原因?加载两加小的图片试试?图片均不超过1200*1800
这图片,过多的话肯定还是会溺出的,我控件的图片都是QQ头像的大小,至于你所问的解决方案,我只能说还没有解决,前些天忙着写项目,然后这几天上头需求不停的改····闲下来的时候已经没心思写代码了。。。 如果条件允许的情况下,你可以去分段读取,但是这样你就得考虑一点,如果操作太频繁,会不会影响到用户体验···因为我也不知道你做的是什么,也不好给你解释出会造成的影响。
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 4 楼 gxingmin 的回复:
引用 2 楼 hahatzq 的回复: 引用 1 楼 gxingmin 的回复:怎么看出有内存泄漏? 你用using块了,其实就不需要再给using块的对象Dispose了 系统会自动回收 任务管理器 执行过程前后的内存占用量 我只调用了这段代码 这跟内存泄漏 没关系,处理大量图像会占用内存,等会儿就会下去的 你要是着急释放内存,可以加上强制回收代码 GC.Collect(……
BMP 只有字节这样的图用Image加载会报内存不足 这个问题有解决方法么?
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 10 楼 gxingmin 的回复:
没什么负面影响吧
问下有些坏图会导致内存不足的情况么? 图像打开后是没有预览的
本拉灯 2013-01-15
  • 打赏
  • 举报
回复
引用 8 楼 zfjclark 的回复:
“using语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以try-finnaly来实现,因为嵌套的using语句可能存在隐藏的Bug。内层using块引发异常时,将不能释放外层using块的对象资源。”--你必须知道的.net
一个using块转成IL语言就是try finnaly所以内层using不存在你说的那样。
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 11 楼 fkuewfnh 的回复:
从表面上看,你这段代码可以说是没有任何问题的, 我前段时间写一个ListBox控件也是同样,可以显示文字和图片,但是加载几千项,也就是几千张图片是没有问题的,但是加载1W项就会报内存溺出了。 所以我估计应该是:图片太大,和图片过多引起。
亲。。你最后怎么解决 分段读取么?
葡萄成熟时 2013-01-15
  • 打赏
  • 举报
回复
从表面上看,你这段代码可以说是没有任何问题的, 我前段时间写一个ListBox控件也是同样,可以显示文字和图片,但是加载几千项,也就是几千张图片是没有问题的,但是加载1W项就会报内存溺出了。 所以我估计应该是:图片太大,和图片过多引起。
gxingmin 2013-01-15
  • 打赏
  • 举报
回复
没什么负面影响吧
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 6 楼 fkuewfnh 的回复:
我想会不会是你图片的原因?加载两加小的图片试试?
图片均不超过1200*1800
zfjclark 2013-01-15
  • 打赏
  • 举报
回复
“using语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以try-finnaly来实现,因为嵌套的using语句可能存在隐藏的Bug。内层using块引发异常时,将不能释放外层using块的对象资源。”--你必须知道的.net
葡萄成熟时 2013-01-15
  • 打赏
  • 举报
回复
我想会不会是你图片的原因?加载两加小的图片试试?
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 4 楼 gxingmin 的回复:
引用 2 楼 hahatzq 的回复: 引用 1 楼 gxingmin 的回复:怎么看出有内存泄漏? 你用using块了,其实就不需要再给using块的对象Dispose了 系统会自动回收 任务管理器 执行过程前后的内存占用量 我只调用了这段代码 这跟内存泄漏 没关系,处理大量图像会占用内存,等会儿就会下去的 你要是着急释放内存,可以加上强制回收代码 GC.Collect(……
就这个了! 谢谢 问下 GC.Collect会有什么负面影响么?如果我着急对内存进行回收的话
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
系统会自己处理的
关键是没处理干净啊 还是有内存没释放出来
gxingmin 2013-01-15
  • 打赏
  • 举报
回复
引用 2 楼 hahatzq 的回复:
引用 1 楼 gxingmin 的回复:怎么看出有内存泄漏? 你用using块了,其实就不需要再给using块的对象Dispose了 系统会自动回收 任务管理器 执行过程前后的内存占用量 我只调用了这段代码
这跟内存泄漏 没关系,处理大量图像会占用内存,等会儿就会下去的 你要是着急释放内存,可以加上强制回收代码 GC.Collect();
bdmh 2013-01-15
  • 打赏
  • 举报
回复
系统会自己处理的
hahatzq 2013-01-15
  • 打赏
  • 举报
回复
引用 1 楼 gxingmin 的回复:
怎么看出有内存泄漏? 你用using块了,其实就不需要再给using块的对象Dispose了 系统会自动回收
任务管理器 执行过程前后的内存占用量 我只调用了这段代码
加载更多回复(1)

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧