WPF 加载大量图片内存溢出

泼墨客 2015-01-13 09:55:04
小弟在用WPF做一个项目,但是图片素材过多,而且素材大小不可以改变,图片素材一共有接近4G,加载的时候总是出现使用一会新图片就没法继续显示了(报了没有足够内存),请问各位前辈,是否有什么办法可以动态加载图片资源呢?先在的做法是直接BitmapImage(new Uri(path))的方法创建一个BitmapImage,然后直接调用这个BitmapImage,发现这么调用,使用过的图片资源是没法及时释放掉的,请问有什么方法能及时释放图片资源,或者可以实现动态加载图片资源呢?感激不尽
...全文
1679 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
LH806732 2015-09-01
  • 打赏
  • 举报
回复
弱引用可以考虑一下。
小猪八Q 2015-08-09
  • 打赏
  • 举报
回复
不知道你的图片加载的需求是什么样的,但是可以参考分页的机制和原理,将你的图片进行分页处理和加载。 我想4G的图片你也不是一次性的呈现给用户的吧
sinat_20919149 2015-04-23
  • 打赏
  • 举报
回复
可以考虑延迟加载, 下拉以后释放掉屏幕区域以外的图片 加载也是只加载屏幕区域以内的
sunny906 2015-02-27
  • 打赏
  • 举报
回复

        private BitmapImage ChangeImage(string path)
        {
            byte[] bytes = null;
            using (BinaryReader br = new BinaryReader(File.Open(path, FileMode.Open)))
            {
                FileInfo fileInfo = new FileInfo(path);
                bytes = br.ReadBytes((int)fileInfo.Length);
            }

            BitmapImage bitmap = new BitmapImage();
            bitmap.BeginInit();
            bitmap.StreamSource = new MemoryStream(bytes);
            bitmap.EndInit();

            return bitmap;
        }

//调用
            this.pic.Source = null;
            this.pic.Source = ChangeImage("...");
生财 2015-02-27
  • 打赏
  • 举报
回复
不知道楼主是何利场景. 如果是很多张小图,可以参照地图瓦片的做法.只在可显示范围时加载,创建一些数量的image 对像然后通过不断修改 source 实现. 另外,将程序的运行模式修改为x64
泼墨客 2015-01-13
  • 打赏
  • 举报
回复
引用 1 楼 lincolnandlinda 的回复:
如果需要频繁更新图像数据,建议使用WriteableBitmap,甚至可以使用它的后台缓冲优化代码。从另一个线程中读取图片的像素信息,一块一块地写入。使用Lock方法预订后台缓冲区,获取指针后更新,使用AddDirtyRect指示区域已改变,然后Unlock。 具体的你查查MSDN吧。
多谢 具体的 我去查一下 试一下
lincolnandlinda 2015-01-13
  • 打赏
  • 举报
回复
如果需要频繁更新图像数据,建议使用WriteableBitmap,甚至可以使用它的后台缓冲优化代码。从另一个线程中读取图片的像素信息,一块一块地写入。使用Lock方法预订后台缓冲区,获取指针后更新,使用AddDirtyRect指示区域已改变,然后Unlock。 具体的你查查MSDN吧。

17,740

社区成员

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

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