WPF系能优化
- 硬件及系统软件
- GPU
- Directx版本
- 布局
- 尽量减少重新布局次数
- 布局发生的原因
-
- 向集合中添加了一个子对象。
- 向子对象应用了 LayoutTransform。
- 为子对象调用了 UpdateLayout 方法。
- 用影响测量或排列过程的元数据进行了标记的依赖项属性的值发生更改。
-
- 使用高效的布局Panel 如canvas, GRID布局比较费时,使用VirtualizingStackPanel
- Xaml树的构造从下至上,以减少父节点变化导致的子节点刷新
- 对象行为
- 对象释放应该同时释放其事件或者利用类似弱事件机制(Galasoft mvvm command)
- 资源
- 使用共享资源
- 使用静态资源
- 绑定
- 使用依赖属性能少量提高绑定性能
- 减少绑定对象的属性,绑定是通过反射来进行的 对于属性对的vm绑定性能差
- 绑定到ItemSource,使用 ObservableCollection<T> , 不要去更改ItemSource对象,应该是更改原有对象的集合
- 控件
- ItemsControl虚拟化
- 虚拟化条件
- 项容器直接添加到 ItemsControl。 例如,如果应用程序将 ListBoxItem 对象显式添加到 ListBox,则 ListBox 不会虚拟化 ListBoxItem 对象。
- ItemsControl 中的项容器属于不同类型。 例如,使用 Separator 对象的 Menu 无法实现项回收,因为 Menu 包含 Separator 和 MenuItem 类型的对象。
- 将 CanContentScroll 设置为 false。
- 将 IsVirtualizing 设置为 false。
- 虚拟化条件
- 容器回收 VirtualizingStackPanel的VirtualizationMode 设置为recycling.
- 优化模板 减少不必要的Visual
- 延迟滚动 ScrollViewer的 IsDeferredScrollingEnabled 设置为true
- ItemsControl虚拟化