簡體   English   中英

如何進一步優化Windows Store應用程序?

[英]How to further optimize Windows Store apps?

我有2個級別的深層收藏,可以將其渲染為諸如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,將column / height設置為static而不是auto。 基本上完成了我可以在此鏈接上做的事情: 十二種提高WPF性能的方法Windows Store Apps的最佳做法

通過完成優化,我實際上減少了10個標頭+ 8個子標頭(總共80個)的加載時間,從1.8秒減少到大約0.5 ms-0.6 ms。

但是,我希望它小於0.5毫秒,所以它就像“即時”。

我還有什么可以做以提高性能?

謝謝!

看起來您的XAML很干凈。 您的C#代碼呢?

如果您使用async / await,並將任務推送到后台線程,則可以真正提高性能。 異步/等待是創建快速響應式應用程序的秘訣。

Visual Studio 2015在識別和修復WPF性能瓶頸方面進行了一些重大改進。

您可以使用分析器確定哪些代碼行花費的時間最長,因此可以選擇使用異步/等待將其推入后台線程。 探查器很棒:它在編輯器中以毫秒為單位顯示每段代碼或代碼行所花費的時間。

更多:

在此情況下,如果Microsoft在WPF中實現編譯時綁定,它將大大提高性能。 綁定速度可能比不再基於反射的速度快10倍。 添加您的投票以實現此功能: https : //visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/7810488-implement-x-bind-for-wpf

是否使用主/細節網格的問題是一個有趣的相關問題。 自2006年發布以來,我一直在與一位使用WPF的開發人員聊天。他是一位專家,他認為從可用性和速度角度來看,主/細節網格並不總是最好的選擇看法。 原因是您幾乎總是在啟動時最終加載所有詳細信息,這很慢,除非您采取一些有趣的技巧在后台延遲加載。 而且,如果您擴展了一些細節網格,屏幕將開始顯得混亂。

好像主/詳細網格是可能的,但通常不是一個好主意。 四處尋找使用主/詳細網格的成功,可用的軟件。 除了Windows Explorer風格的界面外,它們在進化環境中相對較少。 它們在Apple領域不是很常見,這暗示着從用戶角度看它們可能不是最佳的。

真正奇怪的是,相對經驗豐富的程序員往往非常喜歡主/細節網格。 它們似乎對程序員具有直觀吸引力,因為它們對數據的建模是如此出色。 但是從用戶的角度來看,他們寧願擁有一個可以快速加載的平面網格,並且在網格下方的“ Properties面板始終顯示我們選擇的當前行的詳細信息。

是的,這個答案並不能解決您的確切問題-太哲學了-但是可以肯定,地獄將在一個整潔的重構中解決您的速度問題,並有可能使您的應用對用戶來說更加直觀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM