WPF优化体验<一>(转)
最近将一个开发和维护了五年的一个Winform项目进行重构,考虑到最近很流行将用户体验挂在嘴上,于是采用了WPF技术,希望能在外观和体验上有一个全新的效果。
以前使用Winform的时候内存控制得不错,软件使用一天下来也就100M左右,现在使用WPF,十分钟就达到了100M,在感慨WPF的胃口之余也在思考怎样将内存占用量降下去。
首先写了一个测试项目,放两个窗体。第一个窗体放一个DataGrid,里面绑定200条数据,第二个窗体放两个测试按钮,按钮点击代码如下。
现在准备开始测试:
点击Button1打开20个测试窗口,此时内存便达到了126M,点击Button2,关闭所有测试窗体,内存110M,再次打开20个测试窗体,内存205M,关闭所有窗体,内存185M,条用垃圾回收,内存139M
将程序稍微改动了一下,关闭测试窗体时,将数据上下文绑定(DataContext)赋值为空,继续测试
点击Button1打开20个测试窗口,此时内存便达到了123M,点击Button2,关闭所有测试窗体,内存110M,再次打开20个测试窗体,内存136M,关闭所有窗体,内存120M,条用垃圾回收,内存55M
进行了多次测试,结果数据基本一致,为了更直观的对数据有一个比较,现将数据列表如下:
| 程序运行 | 打开20个测试窗体 | 关闭20个测试窗体 | 再次打开20个测试窗体 | 再次关闭20个测试窗体 | 强制垃圾回收 | |
| 关闭窗体时不做处理 | 17M | 126M | 110M | 205M | 185M | 139M |
| 关闭窗体时将DataContext赋空值 | 17M | 123M | 110M | 136M | 120M | 55M |
所以,结论只有一个,当我们使用MVVM模式绑定DataContext或是直接给列表控件绑定数据源的情况下,关闭窗体时,最好将绑定属性赋一个空值
|
1
2
3
4
5
|
protected override void OnClosed(EventArgs e){ base.OnClosed(e); this.DataContext = null;} |
以后会继续博文,将亲身经历的WPF优化方案提出来,和大家一起探讨。
WPF优化体验<一>(转)的更多相关文章
- WPF优化体验<一>
最近将一个开发和维护了五年的一个Winform项目进行重构,考虑到最近很流行将用户体验挂在嘴上,于是采用了WPF技术,希望能在外观和体验上有一个全新的效果. 以前使用Winform的时候内存控制得不错 ...
- WPF优化:Freezable冻结对象
原文:WPF优化:Freezable冻结对象 WPF虽然很美观,效果很炫,但是对资源的消耗也很大,尤其是初次接触WPF的人,因为很多地方虽然实现了想要的效果,但是由于经验问题,所以也会造成很大的资源浪 ...
- MEF 插件式开发 - WPF 初体验
原文:MEF 插件式开发 - WPF 初体验 目录 MEF 在 WPF 中的简单应用 加载插件 获取元数据 依赖注入 总结 MEF 在 WPF 中的简单应用 MEF 的开发模式主要适用于插件化的业务场 ...
- 一次千万级别的SQL查询简单优化体验
背景:从两张有关联的表查询数据,A表数据量1400万,B表数据量8000万.A与B通过ID逻辑关联,没有实际的外键.B表是后来扩展出来的. 问题:根据某个ID查询时超时,运行时跑不出结果. 原因:使用 ...
- Fedora20 优化体验
玩了些许天的fedora系统,到底是加深了对于linux系统的了解 为了便于大家对于fedora系统支持,我将这些天对于fedora的一些不适之处及改进的策略进行了一下小总结.便于新手对于fedora ...
- MEF 插件式开发之 WPF 初体验
MEF 在 WPF 中的简单应用 MEF 的开发模式主要适用于插件化的业务场景中,C/S 和 B/S 中都有相应的使用场景,其中包括但不限于 ASP.NET MVC .ASP WebForms.WPF ...
- 优化体验之使用visual EDM之映射存储过程,datatype to Enum
stored produce,datatype to Enum,Colored Entity,Multiple Diagrams 一:EDM给我们提供的强大功能 1. 存储过程的映射 直接灌sql到d ...
- 前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)
一.背景:页面为何会卡? 1.1 等待时间长(性能) 项目本身包/第三方脚本比较大. JavaScript 执行阻塞页面加载. 图片体积大且多. 特别是对于首屏资源加载中的白屏时间,用户等待的时间就越 ...
- [WPF系列]基础学习(一) WPF是什么?
引言 学习之前,我们首先大概了解下WPF诞生的背景以及它所能解决的问题或者新颖之处.WPF作为微软新一代的用户界面技术, WPF简介 WPF的全称是WindowsPresentationFound ...
随机推荐
- linux下ssh公钥验证的设置和远程登录
1.第一步 在自己本机,通过工具生成一对公私钥对,对应id_rsa/id_rsa.pub 2.第二步 修改服务器配置 1)复制id_rsa.pub公钥内容 将文件内容追加到~/.ssh/ ...
- javaScript 的 map() reduce() foreach() filter()
map(映射), reduce(规约), forEach(遍历), filter(过滤),它们都是高阶函数,都是以传入不同的函数来以不同的方式操作数组元.ie都不支持 一.map方法 *概述 map( ...
- Java中/r和/n的区别
/n换行符,效果是新换一行,光标在原有位置下一行 /r回车符,效果是光标来到下一行行首
- 绝对干货!!css3字体图标—丰富的阿里图标库iconfont的使用详解
在移动端Web项目开发中,我们往往需要用到一些小图标,比如搜索,返回,小菜单,小箭头等等..这如果还用切图你就OUT了.. 而这时CSS3提供的字体图标无疑是我们最好的选择,它就像字体一样,可以设置大 ...
- python-day70--django-Mysql-单表增删改查
项目名:bookmanage app01文件夹 内的 __init__.py import pymysql pymysql.install_as_MySQLdb() app01文件夹 内的models ...
- HDOJ1004
#include<iostream> #include "cstring" using namespace std; int add(char s1[],char s2 ...
- Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level
2018-03-23 18:32:21,690 [INFO] [http-nio-11007-exec-2] org.apache.coyote.http11.Http11Processor [Dir ...
- 指定变形中心点CSS3
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- ES 分布式搜索
ES整个查询过程是scatter/gather的过程,具体如下: 图见 https://blog.csdn.net/thomas0yang/article/details/78572596?utm_s ...
- css实现椭圆
先实现个简单点的,用css实现一个圆,ok,直接上代码: .circle{ width: 100px; height:100px; background: red; border-radius: 50 ...