关于性能

一、    关于硬件加速

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>

六、    控件的性能

控件

虚拟化

容器回收

延迟滚动

ComboBox

可以启用

可以启用

可以启用

ContextMenu

可以启用

可以启用

可以启用

DocumentViewer

不可用

不可用

可以启用

ListBox

默认

可以启用

可以启用

ListView

默认

可以启用

可以启用

TreeView

可以启用

可以启用

可以启用

ToolBar

不可用

不可用

可以启用

七、    其它方式

1、配置字体缓存服务以缩短启动时间;

2、画笔的不透明度与元素的不透明度,在使用 Brush 设置元素的 Fill 或 Stroke 时,设置 Brush.Opacity 值比设置元素的 Opacity 属性效果要好。 修改元素的 Opacity 属性会导致 WPF 创建临时图面。

3、避免使用 ScrollBarVisibility=Auto。

八、    启动时间

  1. 实现初始屏幕。当启动应用程序到显示第一个 UI 之间存在不可避免的明显延迟时,使用初始屏幕可优化感觉启动时间。
  2. 分析启动代码。确定冷启动慢的原因。磁盘 I/O 可能是一个原因,但并非总是它。 通常,应该将外部资源(例如网络、Web 服务或磁盘)的使用降到最低。在测试之前,验证没有其他正在运行的应用程序或服务使用托管代码或 WPF 代码。
  3. 优化模块加载。使用进程资源管理器 (Procexp.exe) 和 Tlist.exe 等工具可确定应用程序需加载哪些模块。 Tlist <pid> 命令显示进程加载的所有模块。例如,如果您没有连接到 Web 但看到加载了 System.Web.dll,则应用程序中存在引用此程序集的模块。请检查以确保该引用是必需的。如果应用程序有多个模块,请将它们合并为一个。 此方法需要的 CLR 程序集加载开销更少。程序集越少,还意味着 CLR 保持的状态也越少。
  4. 推迟初始化操作。
  5. 以编程方式设置数据绑定。不要使用 XAML 以声明方式设置主窗口的 DataContext,而应考虑以编程方式在 OnActivated 方法中对其进行设置。

6、WIN7的SuperFetch功能。Windows Vista 中的内存管理器包含一种称为 SuperFetch 的技术。 SuperFetch 分析内存在一段时间中的使用模式,以确定适合具体用户的最佳内存内容。 SuperFetch 会持续工作以便始终保持该内容。预提取技术是将数据预先加载到内存中而不分析使用模式。 随着时间的推移,如果用户经常在 Windows Vista 上使用 WPF 应用程序,则可能会缩短应用程序的冷启动时间。

WPF性能提高--MSDN学习摘要的更多相关文章

  1. CSS学习摘要-定位实例

    CSS学习摘要-定位实例 注:全文摘自MDN-CSS定位实例 列表消息盒子 我们研究的第一个例子是一个经典的选项卡消息框,你想用一块小区域包括大量信息时,一个非常常用的特征.这包括含有大信息量的应用, ...

  2. 【WPF系列】基础学习-WPF架构概览

    引言 WPF从.net framewok3.0加入以来,经历了很多跟新.每次更新都给用户带来了新的功能或者优化性能.下面我们首先看下WPF再.netFramework中的位置,接着介绍下WPF的架构框 ...

  3. WPF性能优化经验总结

    WPF性能优化一.Rendering Tier 1. 根据硬件配置的不同,WPF采用不同的Rendering Tier做渲染.下列情况请特别注意,因为在这些情况下,即使是处于Rendering Tie ...

  4. 将 Web 应用性能提高十倍的10条建议

    提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于历史上 ...

  5. 将Web应用性能提高十倍的10条建议

    导读 提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于 ...

  6. CSS学习摘要-定位

    CSS学习摘要-定位 注:全文摘自MDN-CSS定位 定位允许您从正常的文档流布局中取出元素,并使它们具有不同的行为,例如放在另一个元素的上面,或者始终保持在浏览器视窗内的同一位置. 本文解释的是定位 ...

  7. CSS学习摘要-引入样式

    CSS学习摘要-引入样式 注:主要是摘录自MDN 网络开发者这个网站的. CSS 实际上如何工作? 当浏览器显示文档时,它必须将文档的内容与其样式信息结合.它分两个阶段处理文档: 浏览器将 HTML和 ...

  8. WPF性能调试系列 – 内存监测

    WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler     WPF内存优化:Ants M ...

  9. WPF性能调试系列 – Ants Performance Profiler

    WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants Memor ...

随机推荐

  1. Codis 集群搭建

    Codis 集群搭建 1 安装go1.3.1 CentOS 7.0 安装go 1.3.1 1.1 下载go安装包 golang中国上下载 下载到Downloads下 1.2 解压 tar -zxf g ...

  2. 【题解】【BT】【Leetcode】Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  3. 【题解】【BST】【Leetcode】Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  4. Word Ladder II

    Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformat ...

  5. mark资料-selenium断言的分类

    操作(action).辅助(accessors)和断言(assertion): 操作action: 模拟用户与 Web 应用程序的交互. 辅助accessors: 这是辅助工具.用于检查应用程序的状态 ...

  6. LINQ 按多个字段排序

    多字段排序 添加到 LINQ 查询结果中的Take()扩展方法用于提取前 个结果: private static void Ordering() { var racers = (from r in F ...

  7. Sprint第二个冲刺(第一天)

    因为人员变动关系,我们的博客推迟了两天发布,希望老师能够谅解. 现在“广商百货”团队项目的新的团队成员组成为:董婷婷(组长).容杰龙.卓炜杰.袁文洪和吴建明 在经过第一轮和几天的休息,现在我们准备开始 ...

  8. QAQ

    贴吧怎么了最近多了一些脑残帖子 回答完问题你追我 ? 你追你mb你车费都凑不够. 答着答着你也许就哭了 我哭你mb 老子脑袋又没病 . 英国最最虐心的调查 ,我虐你mb还英国 你出过省吗? 晚上回家 ...

  9. 使用配置方式进行ssh的整合以及管理员管理的案例(二)

    (续) 删除Hibernate配置文件的写法: 在applicationContext.xml中添加数据库操作的相关配置: <!-- 配置数据库连接池 -->    <bean id ...

  10. IOS中使用手机号注册

    #import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface KCVVerify : NSObject ...