经常给PictureBox.Image赋值,却没有释放操作,会出问题么

张天星 2019-06-11 11:45:44
因为我看网络上的代码,那些自己新建Image的,在操作图片之后,都有Image.Dispose()操作。
而我在PictureBox需要经常更换图片。
那么,我需要判断一下PictureBox.Image是否为空值,为空就赋值,不为空就释放后再赋值么?
还是不用管,.Net的垃圾回收会自动处理?
...全文
1451 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
张天星 2019-06-26
  • 打赏
  • 举报
回复
引用 4 楼 wanghui0380 的回复:
所以,释放和不释放,并不取决于你Image.Dispose()没有,这个取决于你整体的代码,取决你其他地方用没用,取决于gc是否能得到计数为0的情况
多谢,测试结果是,会释放掉,会间隔几秒种后释放。 我在某个拖动操作里面,实时将拖动操作结果生成新图片保存到Pic里面,内存直接爆了。 但是拖动几秒钟,等个几秒再拖动,就可以看到内存上升、下降的过程。
wanghui0380 2019-06-11
  • 打赏
  • 举报
回复
所以,释放和不释放,并不取决于你Image.Dispose()没有,这个取决于你整体的代码,取决你其他地方用没用,取决于gc是否能得到计数为0的情况
wanghui0380 2019-06-11
  • 打赏
  • 举报
回复
这个还是那个问题,你可以不停给他赋值。但是gc要看你外面用了没有。外面没人用了gc才会释放。 想检查到底释放还是没释放,很简单。你可以做个测试,以500毫秒一次的频率,不停给他赋值。他能正常稳定运行2小时,就成。 image是相对比较的大对象,所以内存需求比较高,以500毫秒一次的频率,内存会快速上去的,但是gc会不停释放(如果你外面没有用),所以会稳定在一个相对固定的区间。 当你意外代码一直占有,那么gc释放不了,以500毫秒一次的频率,内存抗不住2小时的
张天星 2019-06-11
  • 打赏
  • 举报
回复
       #region 图像设置
        public void SetImage(string filePath)
        {
            this.picboxTotal.Image = Image.FromFile(filePath);
            picTotalBitmap = new Bitmap(this.picboxTotal.Image);
        }

        internal void SetImage(Bitmap tSrcBmp)
        {
            this.picboxTotal.Image = tSrcBmp;
            picTotalBitmap = new Bitmap(this.picboxTotal.Image);
        }
        #endregion
张天星 2019-06-11
  • 打赏
  • 举报
回复
此外,我还有一个私有成员Bitmap,在Image变更的同时,会修改一次Bitmap。 因为我需要这两个不同类的图片,做不同的操作。 那么,Bitmap在每次赋值前需要释放么
Fxxk_Csdn 2019-06-11
  • 打赏
  • 举报
回复
public static void BmpDisposeShow(PictureBox p,Bitmap src)
        {
            Bitmap old = p.Image as Bitmap;
            p.Image = src;
            old?.Dispose();
        }
一直给picturebox新的bitmap或者image,内存是会随着时间增加而上升的,就算是写在using里面也没有用,需要你手动把它释放掉。
  • 打赏
  • 举报
回复
引用 4 楼 wanghui0380 的回复:
所以,释放和不释放,并不取决于你Image.Dispose()没有,这个取决于你整体的代码,取决你其他地方用没用,取决于gc是否能得到计数为0的情况
如果找不到释放, 是不是可以加个 using() 自动释放

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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