cod*_*nix 3 .net wpf performance xaml baml
我的应用程序正在将一堆相同的用户控件加载到一个ScrollPanel.问题是,这很慢.
分析器显示该方法Application.LoadComponent()在我的用户控件的构造函数中由设计器代码内部调用,是瓶颈.该方法的文档说,此方法加载XAML文件.
问题是,我如何使用BAML而不是XAML?我怎样才能实现我的用户控件的XAML在从它创建新实例时不能一次又一次地解析?还有另一种方法可以更快地加载我的用户控件吗?
LoadComponent()已经加载.baml,不要担心这个问题.微软故意这样做,不让开发人员依赖baml格式.展望未来,他们可以改进格式而不会破坏任何现有的应用程序.
是的,还有另一种方法可以让它更快地运作.首先要进行的优化是UI虚拟化.WPF已经附带了方便的VirtualizingStackPanel.它与ItemsControls协同工作,并且有一定的局限性(例如,如果您创建项目容器并通过您自己添加它们,您可以放松虚拟化,或者如果您ScrollViewer.CanContentScroll="False"再次放松它).要使用虚拟化,您可能必须重写应用程序以使用ItemsControl + DataBinding样式(ListBox已启用虚拟化)
如果您觉得需要有关UI虚拟化的更多信息,请参阅Dan Crevier的博客.
最后的建议.您可以尝试将UserControls重写为自定义控件.我的简单性能测试显示了以下数字.要使用相同的可视树创建10K控件,需要:
希望这可以帮助