- 硬件及系统软件
- 布局
- 使用高效的布局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