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 ...
随机推荐
- 关于controller中调用多个service方法的问题
一般service方法是有事务的,把所有操作封装在一个service方法中是比较安全的. 如果在controller中调用多个service方法,只有查询的情况下是可以这样的.
- yarn的淘宝镜像
现在有很多人使用npm但是很多人也开始使用了更快的更方便额的yarn,可是yarn也有下载速度慢,容易被墙的担忧~又不能像npm那样直接安装淘宝镜像,所以就有了更改yarn的yarn源~ yarn c ...
- UVA-1374 Power Calculus (迭代加深搜索)
题目大意:问最少经过几次乘除法可以使x变成xn. 题目分析:迭代加深搜索. 代码如下: # include<iostream> # include<cstdio> # incl ...
- HDOJ1009
#include "iostream" #include "algorithm" #include "cstdio" using names ...
- 遍历HashMap的方法(四)
Map map = new HashMap(); for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { Map.Entr ...
- .net群讨论笔记
本篇为.net群中学到的零碎知识点笔记,将持续更新 感谢群内大神,群号(128485855) 1.关于URL编码问题encodeURIComponent 2.c#直接打开本机的excel(包括其他类型 ...
- The "Double-Checked Locking is Broken" Declaration
双重检查锁定在延迟初始化的单例模式中见得比较多(单例模式实现方式很多,这里为说明双重检查锁定问题,只选取这一种方式),先来看一个版本: public class Singleton { private ...
- 在 Ubuntu 14.04 Chrome中安装Flash Player(转)
在 Ubuntu 14.04 中安装 Pepper Flash Player For Chromium 一个 Pepper Flash Player For Chromium 的安装器已经被 Ubu ...
- python爬虫常见面试题(一)
前言 之所以在这里写下python爬虫常见面试题及解答,一是用作笔记,方便日后回忆:二是给自己一个和大家交流的机会,互相学习.进步,希望不正之处大家能给予指正:三是我也是互联网寒潮下岗的那批人之一,为 ...
- 搭建 spring 项目
参考原文:http://blog.csdn.net/binyao02123202/article/details/20387595 1.新建maven web 工程 2.编辑pom.xml添加依赖 & ...