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>

六、    控件的性能

控件

虚拟化

容器回收

延迟滚动

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 应用程序,则可能会缩短应用程序的冷启动时间。

上一篇:[HNOI 2008]越狱


下一篇:【汇编语言】Win10 安装 DOXBox0.74