WPF性能优化的一些建议
- 尽量多使用Canvas等简单的布局元素,少使用Grid或者StackPanel等复杂的,减小开销。
- 少用Margin Padding尤其避免嵌套使用。
- 在自定义控件,尽量不要在控件的ResourceDictionary定义资源,而应该放在Window或者Application级。因为放在控件中会使每个实例都保留一份资源的拷贝。
- 自定义控件尽量从轻量级的控件继承。
- 需要绑定的属性设置为DependencyProperty的依赖项属性效率要高很多,不要自己写继承自INotifyPropertyChanged的属性:http://www.codeproject.com/Articles/62158/DependencyProperties-or-INotifyPropertyChanged
- 尽量使用Static Resources不用DynamicResource。
- 文字少的时候用TextBlock或者label,长的时候用FlowDocument。
- 绑定的字符串用Textblock不用label。
- 如果正在绘制的内容需要频繁地重新绘制,考虑设置各Uelement对象的CacheMode="BitmapCache"。
- 尽量不使用DropShadowEffect投影效果。
- 避免使用 Run 来设置文本属性:(MSDN)
-
<TextBlock> <Run FontWeight="Bold">Hello, world</Run> </TextBlock> <TextBlock FontWeight="Bold"> Hello, world </TextBlock>
-
- 尽量不要过分依赖使用值转换器。
- 尽量少使用第三方类库。
- 计时尽量使用DispatcherTimer替代Timer。
- 尽量不要设置控件Opacity属性而用Visibility。