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