这篇博客将介绍一些提高WPF程序的建议(水平有限,如果建议有误,请指正。)
1. 加快WPF程序的启动速度:
(1).减少需要显示的元素数量,去除不需要或者冗余的XAML元素代码.
(2).使用UI虚拟化,只显示当前需要显示的元素.
(3).不要把不要显示的自定义控件隐藏在主界面中,虽然它们不会显示出来,但是程序启动时还是会去计算自定义控件所需的空间和位置.
2. 耗时操作放在放在非UI线程上处理,保持UI的顺畅。处理完成后如果需要在UI上展示,调用Dispatcher.BeginInoke()方法。更多内容参考WPF QuickStart系列之线程模型(Thread Model);
3. 关于Data Binding,根据实际情况对Binding指定不同的Mode,性能OneWay优于TwoWay。另外修正掉系统中Binding错误,可以在Visual Studio的输出日志中查找System.Windows.Data Error;
4. Resources: 系统资源,通常情况下我们会把样式资源都统一到App.xaml中,这是很好的,便于资源的管理。不过尽量把多次重复用到的资源放到App.xaml中。例如某些页面的资源只会在当前页面中使用到,那么可以把资源定义在当前页面; 如非必要,不要使用DynaicResource,使用StaticResource即可;
5. 对Item类型控件重写时,使用VirtualizingStackPanel作为ItemPanel,这样列表资源可以只渲染当前需要的内容。不过如果设置CanContextScrol="True"会阻止虚拟化,另外使用VirtualizingStackPanel时,可以设置VirtualizingStackPanel.VirtualizationMode="Recycling", 这样已经显示过的列表不会被重复创建和释放掉。
6. 尽量少的使用Animation,尤其在程序启动时,Animation渲染时会占用一些CPU资源。
大概就这些。另外遇到性能问题时,可以使用一些工具来分析,VS 2015的性能分析工具就很不错,可以看到可视化树的元素和内存占用情况。
感谢您的阅读。
提高WPF程序性能的几条建议的更多相关文章
-
IOS开发-提升app性能的25条建议和技巧
前言 这篇文章介绍了作者开发工作中总结的25个iOS开发tips, 多年之前读过这篇文章.收益良多,基本每一个tips在我的应用开发过程中都使用过.今天把这篇文章又一次整理转发下,与大家一起学习,不论 ...
-
一个用于每一天JavaScript示例-使用缓存计算(memoization)为了提高应用程序性能
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
-
用 Function.apply() 的参数数组化来提高 JavaScript程序性能
我们再来聊聊Function.apply() 在提升程序性能方面的技巧. 我们先从 Math.max() 函数说起, Math.max后面可以接任意个参数,最后返回所有参数中的最大值. 比如 aler ...
-
mysql 性能优化 20 条建议
MySQL性能优化的最佳20+条经验 2009年11月27日陈皓发表评论阅读评论100,946 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性 ...
-
[译]在Linux上的提高MySQL/MariaDB安全性的12条建议
MySQL 是世界上最流行的开源数据库系统,而MariaDB(MySQL的一个分支)是世界上发展最快的开源数据库系统.安装MySQL服务器之后,它的默认配置是不安全的,保护它是一般数据库管理中的基本任 ...
-
jQuery:jQuery性能优化28条建议
http://www.xue5.com/WebDev/jQuery/671700.html 直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将 ...
-
给Java程序员的几条建议
对于Java程序猿学习的建议 这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是LZ你是如何学习Java的,能不能给点建议? 今天LZ是打算来点干货,因此咱们就不说一些学 ...
-
提高.net程序性能和稳定性-CLR Profile
CLR Profile能够看到应用程序的内存堆栈情况并且能够查询垃圾回收机制的行为.利用CLR Profile可以确定你的代码哪儿分配了太多内存,从而导致垃圾回收机制的执行,哪些代码长时间的占有内存. ...
-
使用BOOST BIND库提高C++程序性能
Boost.Bind为函数和函数对象,值语义和指针提供语义了一致的语法.我们首先通过一些简单的例子来看看它的基本用法,之后我们会延伸到嵌套绑定以实现功能组合.理解bind用法的一个关键是理解占位符(p ...
随机推荐
-
C语言用面向对象的思想写贪吃蛇
大概一年前这时候,接触C语言一个月,那时候知之甚少,对面向对象只觉”可远观而不可亵玩“,而且会看到很多言论说C语言就是面向过程的语言,C++就是面向对象的语言.不过,不记得什么时候在网上看到过一篇博文 ...
-
.NET Core是什么?
[初步理解] .NET Core 是一个开源的.跨平台的 .NET 实现.而 .NET Framework 是基于 Windows 的 .NET 实现,Mono 是 .NET Framework 的一 ...
-
C#通过WinAPI获取内存信息,32位64位可用
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runti ...
-
linux命令(4):ps命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
-
1.linux概述及如何访问
1.linux终端访问及退出 1.1访问 linux有7个终端:(1个真实终端+6个虚拟终端) ctril+alt+Fn (Fn是指F1\F2..)切换终端 1.2退出: shutdown 缓冲一会关 ...
-
云服务器Windows Server2012 配置http服务器(又称Web服务器,IIS)
出错:无法打开运行空间池.服务器管理器WinRM插件可能已损坏或丢失. 解决方法: http://shiyousan.com/post/636308065767125916 第一步是开启WinRM服务 ...
-
Linux 学习 (六) 关机与重启命令
Linux达人养成计划 I 学习笔记 shutdown [选项] 时间 -c:取消前一个关机命令 -h:关机 -r:重启 shutdown命令会在关机或重启时自动保存系统中正在运行的服务,最安全的关机 ...
-
P4630 [APIO2018] Duathlon 铁人两项
思路 圆方树,一个点双中的所有点都可以被经过,所以给圆点赋值-1,方点赋值为圆点个数,统计圆点两两之间的路径权值和即可 代码 #include <cstdio> #include < ...
-
python——虚拟环境之virtualenv(windows10,64位)
1 问题 当我们拥有两个甚至多个项目A.B.C......,各个项目正常运行需求的python运行环境都不相同.而默认情况下,不管哪个项目,使用的都是全局的Python环境.上述情况,造成的问题就是, ...
-
jquery clone 获取文本框值得问题
1 clone 出来的文本框 默认不会把原来的事件也带过去 如果使用 $("#").clone(true); true 可以将原来的事件带过去 获取文本框的值 可以使用事件 ...