关于性能 算法
1、 关于硬件加速编程
一、对于大多数图形硬件而言,大型图面是指达到 2048x2048 或 4096x4096 像素大小的图面。windows
2、 合理的布局缓存
一、简单地说,布局是一个递归系统,实如今屏幕上对元素进行大小调整、定位和绘制。网络
二、集合中的子级数目越多,所需的计算量就越大app
三、使用简洁的布局面板,Grid 或 StackPanel 控件提供的功能比 Canvas 控件多不少。 功能大大提升的代价是性能成本也大大提升。工具
四、更新而不替换 RenderTransform。布局
五、从上到下生成树。定义和添加元素时,采用自上向下的原则。性能
3、 二维图形和图像处理测试
一、使用绘图(Drawing)和形状(Shape),Drawing 对象比 Shape 对象结构简单而且性能特性更为优良。
二、图像:a、若是程序须要缩略图,应该显示建立缩略图。WPF会完成大小加载图像并进行解码。b、使用BitmapScalingMode.LowQuality属性通知 WPF 呈现引擎在处理图像时从质量优化算法切换到速度优化算法。
4、 对象行为
一、不移除对象的事件处理程序可能会使对象保持活动状态。对象传递给其事件的委托是对该对象的有效引用。 所以,事件处理程序可使对象保持活动状态的时间超过预期时间。 当对已注册为侦听对象事件的对象执行清理时,在释放对象前移除委托是很是必要的。 将不须要的对象保持为活动状态会增长应用程序内存使用量。 当对象为逻辑树或可视化树的根时更是如此。
二、依赖属性的性能低于CLR属性。
三、使用Freezable对象。SolidColorBrush.Freeze()方法。冻结 Freezable 能够改进其性能,由于它再也不须要因更改通知而消耗资源。冻结的 Freezable 也能够在线程之间共享,而解冻的 Freezable 则不能。
四、使用虚拟化。使用VirtualizingStackPanel
5、 资源共享
一、不进行复制而共享画笔;
二、尽量使用静态资源; <Label Foreground="{StaticResource myBrush}">Label 1</Label>
6、 控件的性能
控件 |
虚拟化 |
容器回收 |
延迟滚动 |
能够启用 |
能够启用 |
能够启用 |
|
能够启用 |
能够启用 |
能够启用 |
|
不可用 |
不可用 |
能够启用 |
|
默认 |
能够启用 |
能够启用 |
|
默认 |
能够启用 |
能够启用 |
|
能够启用 |
能够启用 |
能够启用 |
|
不可用 |
不可用 |
能够启用 |
7、 其它方式
一、配置字体缓存服务以缩短启动时间;
二、画笔的不透明度与元素的不透明度,在使用 Brush 设置元素的 Fill 或 Stroke 时,设置 Brush.Opacity 值比设置元素的 Opacity 属性效果要好。 修改元素的 Opacity 属性会致使 WPF 建立临时图面。
三、避免使用 ScrollBarVisibility=Auto。
8、 启动时间
六、WIN7的SuperFetch功能。Windows Vista 中的内存管理器包含一种称为 SuperFetch 的技术。 SuperFetch 分析内存在一段时间中的使用模式,以肯定适合具体用户的最佳内存内容。 SuperFetch 会持续工做以便始终保持该内容。预提取技术是将数据预先加载到内存中而不分析使用模式。 随着时间的推移,若是用户常常在 Windows Vista 上使用 WPF 应用程序,则可能会缩短应用程序的冷启动时间。