如何进一步优化Windows应用商店应用程序
本文关键字:应用程序 应用 Windows 进一步 优化 | 更新日期: 2023-09-27 18:00:09
我有两个级别的深度集合,我将其渲染为类似Header、Child Item的东西。
大致上,我的代码看起来像这样:
<ScrollViewer>
<ItemsControl IsEnabled="{Binding Path=IsEnabled}"
ItemsSource="{Binding Path=HeaderViewModels, Mode=OneTime}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemsTemplate>
<DataTemplate>
<StackPanel Visibility="{Binding Path=ShouldShow, Converter={StaticResource SomeConverter}}">
<TextBlock Text="{Binding Path=Description, Mode=OneTime}" />
<ItemsControl ItemsPanel="{StaticResource WinRTXAMLWrapPanel}"
ItemsSource="{Binding Path=ChildViewModels, Mode=OneTime}">
<i:Interaction.Behaviors>
<SomeClass:AdjustSizeBehavior SizeFromParentMode="Height" />
</i:Interaction.Behaviors>
<ItemsControl.ItemsTemplate>
<DataTemplate>
<ContentControl>
<i:Interaction.Behaviors>
<SomeClass:IsEnabledBehavior />
<SomeClass:PointerPressBehavior />
<SomeClass:PointerLeaveBehavior />
</i:Interaction.Behaviors>
<StackPanel>
<TextBlock Text="X">
<i:Interaction.Behaviors>
<SomeClass:SetXMarkColor />
</i:Interaction.Behaviors>
</TextBlock>
<TextBlock Text="{Binding Path=Description, Mode=OneTime}" />
</StackPanel>
</ContentControl>
</DataTemplate>
</ItemsControl.ItemsTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemsTemplate>
</ItemsControl>
</ScrollViewer>
省略了样式,但它几乎是背景、边距、字体大小等。此外,你可以看到我使用了很多绑定和行为。
我已经做了我能想到的大部分优化。删除了不必要的UI元素(例如用于"背景"的矩形),使用StackPanel而不是Grid,将列/高度设置为静态而不是自动。基本上在这个链接上做了我能做的:提高wpf性能的十二种方法和Windows应用商店的最佳实践
通过我所做的优化,我实际上减少了10个头文件的加载时间+每个8个子文件(总共80个),从1.8秒减少到大约0.5毫秒-0.6毫秒。
然而,我希望它能达到0.5毫秒以下,所以它就像"即时"。
我还能做些什么来提高表现吗?
谢谢!
看起来您的XAML非常干净。你的C#代码呢?
如果您使用async/await,并将任务推送到后台线程中,它确实可以提高性能。Async/await是创建快速、响应式应用程序的秘诀。
VisualStudio2015在识别和修复WPF性能瓶颈方面有一些很大的改进。
您可以使用探查器识别哪些代码行占用的时间最长,因此可以使用async/await将其推送到后台线程。探查器非常棒:它在编辑器中显示每个代码块或代码行所用的时间(以毫秒为单位)。
更多:
- https://channel9.msdn.com/Events/Build/2015/3-635
- https://channel9.msdn.com/Events/dotnetConf/2015/Debugging-Performance-Issues-Using-Visual-Studio-2015
目前,如果Microsoft在WPF中实现编译时绑定,它将极大地提高性能。绑定速度可以快10倍,因为它不再基于反射。在此处添加您的投票以实现此功能:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/7810488-implement-x-bind-for-wpf
是否使用主/细节网格是一个有趣的相关问题。我和一个开发人员聊天,他自2006年发布WPF以来一直在使用它。他有点像大师,他认为从可用性和速度的角度来看,主/细节网格并不总是最好的。原因是,你几乎总是在启动时加载所有的细节,这很慢,除非你在后台使用一些有趣的技巧来延迟加载。如果你展开了一些细节网格,屏幕就会开始看起来很乱。
这几乎就像主网格/细节网格是可能的,但它们通常不是一个好主意。四处寻找使用主网格/细节网格的成功、可用的软件。除了Windows资源管理器风格的界面外,它们在进化过程中相对罕见。它们在苹果的土地上并不常见,这表明从用户的角度来看,它们可能不是最佳的。
真正奇怪的是,相对有经验的程序员往往非常喜欢主/细节网格。它们似乎对程序员有着直观的吸引力,因为它们对数据的建模非常好。但从用户的角度来看,他们更希望有一个快速加载的平面网格,以及网格下方的Properties
面板,该面板始终显示我们选择的当前行的详细信息。
是的,这个答案并没有解决你的确切问题——它太哲学了——但它肯定会在一次巧妙的重构中解决你的速度问题,并可能让你的应用程序对你的用户来说更直观。