求助!WPF图片资源无法被回收导致爆内存,如何解决

adelina2kx 2017-04-21 02:41:46
我写了一个爬虫程序抓图片的,UI上每次加载20张图片,就是一个含20个Bitmap的集合,直接放到UI模板的数据源里引用,翻页时重新new一个BitMap数组然后替换UI的数据源,理想情况下老的一批BitMap数组失去了数据源的引用过一会儿应该会被GC自动回收才对,可是随着程序的运行,1分钟后程序的内存占用就接近2G了。。。要么直接死机要么报内存溢出然后被强制退出。
想问问大家有没写过类似的图片加载代码,你们是如何解决图片资源的即时释放问题?
我尝试过替换数据源之前把老的Bitmap集合遍历,挨个调用Dispose,不管用
...全文
1651 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzxking512 2018-10-17
  • 打赏
  • 举报
回复
用这样的方式来加载bitmap

        private static BitmapImage ByteArrayToBitmapImage(byte[] byteArray)
        {
            BitmapImage bmp = null;

            try
            {
                var ms = new System.IO.MemoryStream(byteArray);
                bmp = new BitmapImage();
                bmp.BeginInit();
                bmp.CacheOption = BitmapCacheOption.OnLoad;
                bmp.StreamSource = ms;
                bmp.EndInit();
                bmp.Freeze();
                ms.Close();
            }
            catch
            {
                bmp = null;
            }

            return bmp;
        }
qq_29862715 2018-06-05
  • 打赏
  • 举报
回复
手动调用GC
微恒软件 2017-05-02
  • 打赏
  • 举报
回复
根据你描述的问题,应该是资源没有释放造成,你可以了解一下托管资源相关原理,你每次用new 并且是20个,相当于一直在占用,我的建议是你手动释放资源,并把你的对象置为null,试试,仅为思路建议。
  • 打赏
  • 举报
回复
直接放到UI模板的数据源里引用 -》改为后台遍历方法测试,用下边的获取BitMapImage方法 http://bbs.csdn.net/topics/392138366

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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