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 ...
 
随机推荐
- WPF PasswordBox.Password 的数据绑定
			
WPF的PasswordBox控件的Password属性不是依赖属性,无法直接进行数据绑定,为使其在MVVM模式中正常使用,可以为PasswordBox增加一个助手类,代码如下: 注:代码摘自:htt ...
 - P3377 【模板】左偏树(可并堆)
			
//#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast,no-stack- ...
 - mysql日期查询大全
			
-- 查询昨日一整天的数据 DAY) ,'%Y-%m-%d 23:59:59') AS '昨日结束时间' -- 查询今日开始到当前时间的数据 DAY) ,'%Y-%m-%d %H:%i:%s') AS ...
 - python-day33--互斥锁
			
锁的意思就是:一个一个的执行 from multiprocessing import Process,Lock import os import time def work(mutex): mutex ...
 - nyoj306   二分+DFS
			
走迷宫 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Dr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场玩之不疲.这天卡多又跑出来了,在SJ ...
 - JDBC连接SQLSERVER
			
package xhs;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; im ...
 - CSS样式属性——背景
			
背景——包括背景颜色.背景图片,以及背景图片的控制 background-color:设置背景色(transparent表示透明的背景色) background-image:设置元素的背景图片 ba ...
 - OAF 中下载使用XML Publisher下载PDF附件
			
OAF doesn't readily expose the Controller Servlet's HttpRequest and HttpResponse objects so you need ...
 - synchronized锁普通方法和锁静态方法
			
1.对象锁钥匙只能有一把才能互斥,才能保证共享变量的唯一性 2.在静态方法上的锁,和 实例方法上的锁,默认不是同样的,如果同步需要制定两把锁一样. 3.关于同一个类的方法上的锁,来自于调用该方法的对象 ...
 - 微信小程序 -- 数据请求
			
微信小程序 -- 数据请求 微信小程序请求数据,并不是一个可以在url打开有数据就可以拿到数据那么简单 浏览器地址输入 可以获取参数的url 微信小程序中 代码展示 wxml <view> ...