如何进一步优化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毫秒以下,所以它就像"即时"。

我还能做些什么来提高表现吗?

谢谢!

如何进一步优化Windows应用商店应用程序

看起来您的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面板,该面板始终显示我们选择的当前行的详细信息。

是的,这个答案并没有解决你的确切问题——它太哲学了——但它肯定会在一次巧妙的重构中解决你的速度问题,并可能让你的应用程序对你的用户来说更直观。