WPF性能提高--MSDN学习摘要
关于性能
一、 关于硬件加速
1、对于大多数图形硬件而言,大型图面是指达到 2048x2048 或 4096x4096 像素大小的图面。
二、 合理的布局
1、简单地说,布局是一个递归系统,实现在屏幕上对元素进行大小调整、定位和绘制。
2、集合中的子级数目越多,所需的计算量就越大
3、使用简洁的布局面板,Grid 或 StackPanel 控件提供的功能比 Canvas 控件多很多。 功能大大提高的代价是性能成本也大大提高。
4、更新而不替换 RenderTransform。
5、从上到下生成树。定义和添加元素时,采用自上向下的原则。
三、 二维图形和图像处理
1、使用绘图(Drawing)和形状(Shape),Drawing 对象比 Shape 对象结构简单并且性能特性更为优良。
2、图像:a、如果程序需要缩略图,应该显示创建缩略图。WPF会完成大小加载图像并进行解码。b、使用BitmapScalingMode.LowQuality属性通知 WPF 呈现引擎在处理图像时从质量优化算法切换到速度优化算法。
四、 对象行为
1、不移除对象的事件处理程序可能会使对象保持活动状态。对象传递给其事件的委托是对该对象的有效引用。 因此,事件处理程序可以使对象保持活动状态的时间超过预期时间。 当对已注册为侦听对象事件的对象执行清理时,在释放对象前移除委托是非常必要的。 将不需要的对象保持为活动状态会增加应用程序内存使用量。 当对象为逻辑树或可视化树的根时更是如此。
2、依赖属性的性能低于CLR属性。
3、使用Freezable对象。SolidColorBrush.Freeze()方法。冻结 Freezable 可以改进其性能,因为它不再需要因更改通知而消耗资源。冻结的 Freezable 也可以在线程之间共享,而解冻的 Freezable 则不能。
4、使用虚拟化。使用VirtualizingStackPanel
五、 资源共享
1、不进行复制而共享画笔;
2、尽可能使用静态资源; <Label Foreground="{StaticResource myBrush}">Label 1</Label>
六、 控件的性能
|
控件 |
虚拟化 |
容器回收 |
延迟滚动 |
|
可以启用 |
可以启用 |
可以启用 |
|
|
可以启用 |
可以启用 |
可以启用 |
|
|
不可用 |
不可用 |
可以启用 |
|
|
默认 |
可以启用 |
可以启用 |
|
|
默认 |
可以启用 |
可以启用 |
|
|
可以启用 |
可以启用 |
可以启用 |
|
|
不可用 |
不可用 |
可以启用 |
七、 其它方式
1、配置字体缓存服务以缩短启动时间;
2、画笔的不透明度与元素的不透明度,在使用 Brush 设置元素的 Fill 或 Stroke 时,设置 Brush.Opacity 值比设置元素的 Opacity 属性效果要好。 修改元素的 Opacity 属性会导致 WPF 创建临时图面。
3、避免使用 ScrollBarVisibility=Auto。
八、 启动时间
- 实现初始屏幕。当启动应用程序到显示第一个 UI 之间存在不可避免的明显延迟时,使用初始屏幕可优化感觉启动时间。
- 分析启动代码。确定冷启动慢的原因。磁盘 I/O 可能是一个原因,但并非总是它。 通常,应该将外部资源(例如网络、Web 服务或磁盘)的使用降到最低。在测试之前,验证没有其他正在运行的应用程序或服务使用托管代码或 WPF 代码。
- 优化模块加载。使用进程资源管理器 (Procexp.exe) 和 Tlist.exe 等工具可确定应用程序需加载哪些模块。 Tlist <pid> 命令显示进程加载的所有模块。例如,如果您没有连接到 Web 但看到加载了 System.Web.dll,则应用程序中存在引用此程序集的模块。请检查以确保该引用是必需的。如果应用程序有多个模块,请将它们合并为一个。 此方法需要的 CLR 程序集加载开销更少。程序集越少,还意味着 CLR 保持的状态也越少。
- 推迟初始化操作。
- 以编程方式设置数据绑定。不要使用 XAML 以声明方式设置主窗口的 DataContext,而应考虑以编程方式在 OnActivated 方法中对其进行设置。
6、WIN7的SuperFetch功能。Windows Vista 中的内存管理器包含一种称为 SuperFetch 的技术。 SuperFetch 分析内存在一段时间中的使用模式,以确定适合具体用户的最佳内存内容。 SuperFetch 会持续工作以便始终保持该内容。预提取技术是将数据预先加载到内存中而不分析使用模式。 随着时间的推移,如果用户经常在 Windows Vista 上使用 WPF 应用程序,则可能会缩短应用程序的冷启动时间。
WPF性能提高--MSDN学习摘要的更多相关文章
- CSS学习摘要-定位实例
CSS学习摘要-定位实例 注:全文摘自MDN-CSS定位实例 列表消息盒子 我们研究的第一个例子是一个经典的选项卡消息框,你想用一块小区域包括大量信息时,一个非常常用的特征.这包括含有大信息量的应用, ...
- 【WPF系列】基础学习-WPF架构概览
引言 WPF从.net framewok3.0加入以来,经历了很多跟新.每次更新都给用户带来了新的功能或者优化性能.下面我们首先看下WPF再.netFramework中的位置,接着介绍下WPF的架构框 ...
- WPF性能优化经验总结
WPF性能优化一.Rendering Tier 1. 根据硬件配置的不同,WPF采用不同的Rendering Tier做渲染.下列情况请特别注意,因为在这些情况下,即使是处于Rendering Tie ...
- 将 Web 应用性能提高十倍的10条建议
提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于历史上 ...
- 将Web应用性能提高十倍的10条建议
导读 提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于 ...
- CSS学习摘要-定位
CSS学习摘要-定位 注:全文摘自MDN-CSS定位 定位允许您从正常的文档流布局中取出元素,并使它们具有不同的行为,例如放在另一个元素的上面,或者始终保持在浏览器视窗内的同一位置. 本文解释的是定位 ...
- CSS学习摘要-引入样式
CSS学习摘要-引入样式 注:主要是摘录自MDN 网络开发者这个网站的. CSS 实际上如何工作? 当浏览器显示文档时,它必须将文档的内容与其样式信息结合.它分两个阶段处理文档: 浏览器将 HTML和 ...
- WPF性能调试系列 – 内存监测
WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants M ...
- WPF性能调试系列 – Ants Performance Profiler
WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants Memor ...
随机推荐
- Word Ladder II
Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformat ...
- Qt之QCheckBox
简述 QCheckBox继承自QAbstractButton,它提供了一个带文本标签的复选框. QCheckBox(复选框)和QRadioButton(单选框)都是选项按钮.这是因为它们都可以在开(选 ...
- (进阶篇)Cookie与 Session使用详解
1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...
- relative与absolute的结合使用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- php函数 date() 详细资料
date_default_timezone_set(PRC); /*把时间调到北京时间,php5默认为格林威治标准时间*/ date () a: "am"或是"pm&qu ...
- 383. Ransom Note
Given an arbitrary ransom note string and another string containing letters from all th ...
- tyvj 1049 最长不下降子序列 n^2/nlogn
P1049 最长不下降子序列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数第二行n个数 输出格式 ...
- Ubuntu12.04安装中文字体(转)
1.在/usr/share/fonts/下,新建文件夹winFonts,如果没有fonts目录,就安装fontconfig软件(系统字体管理),再将win7字体msyh.ttf和msyhbd.ttf复 ...
- eclipse项目导入到android studio
只需要添加gradle文件,在里面添加如下代码片段------------------------------------------- main { manifest.srcFile 'Androi ...
- SpringMVC 自定义参数绑定实现日期类型绑定
package cn.itcast.ssm.controller.converter; import java.text.ParseException; import java.text.Simple ...