博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF中加载高分辨率图片性能优化
阅读量:6457 次
发布时间:2019-06-23

本文共 2104 字,大约阅读时间需要 7 分钟。

原文:

在最近的项目中,遇到一个关于WPF中同时加载多张图片时,内存占用非常高的问题。

问题背景:

在一个ListView中同时加载多张图片,注意:我们需要加载的图片分辨率非常高。

代码:

XAML:

C#:

public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();        }        private void Button_Click(object sender, RoutedEventArgs e)        {            lvImages.Items.Clear();            // Image folder location: D:\Pics            string[] files = System.IO.Directory.GetFiles(@"D:\Pics");            List
models = new List
(); foreach(var path in files) { BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new System.Uri(path); image.EndInit(); image.Freeze(); models.Add(new ImageSourceModel() { ImageSource = image }); } lvImages.ItemsSource = models; } } public class ImageSourceModel { public ImageSource ImageSource { get; set; } }

内存占用情况(此时只加载了20张图片,内存占用>1G):

优化方案:

1. 初始加载时,只加载部分图片并显示。当ScrollViewer滚动到底部时,再加载一部分。关于这个方案,可以参考 ;

但是这并不能解决最终内存占用过高的情况。

2. 给图片设置DecodePixelWidth属性,

BitmapImage image = new BitmapImage();    image.BeginInit();    image.UriSource = new System.Uri(path);    image.DecodePixelWidth = 800;    image.EndInit();    image.Freeze();    models.Add(new ImageSourceModel() { ImageSource = image });

此时的内存占用如图

内存降低的非常显著,此时同样多的图片内存占用只有40M左右。

最终我们可以把优化方案1和优化方案2结合起来。这样在加载多张图片时不会出现卡顿的现象。另外从用户体验的角度我们可以在图片显示出来前,先用一个Loading的动画效果过渡下。

感谢您的阅读。代码和测试图片请点击下载。

转载地址:http://yrnzo.baihongyu.com/

你可能感兴趣的文章
noj 2033 一页书的书 [ dp + 组合数 ]
查看>>
ERDAS软件应用(四)遥感影像数据增强
查看>>
修改OBS为仅直播音频
查看>>
完整版:《开源框架实战宝典电子书V1.0.0》内测版下载地址!
查看>>
OCP读书笔记(14) - 管理数据库性能
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
CKEditor的使用-编辑文本
查看>>
洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块
查看>>
HDU------checksum
查看>>
使用树莓派拍摄延时动画,制作GIF图
查看>>
css命名规范
查看>>
js 效果
查看>>
19.Java5同步集合类的应用
查看>>
python 关键字yield解析
查看>>
<c:forEach varStatus="status">中 varStatus的作用
查看>>
Aqua Data Studio 数据库开发工具
查看>>
puppet来管理文件和软件包
查看>>
【转载】基于lucene的搜索方案
查看>>
Python基础进阶之路(一)之运算符和输入输出
查看>>
阻塞非阻塞异步同步 io的关系
查看>>