作業中の Windows Phone 7.5 アプリケーションでパフォーマンスの問題が発生しています。をListBox
使用していると がVirtualizationMode="Recycling"
ありDataTemplate
ます。パフォーマンスが悪いことを除けば、うまく機能しているようです。いくつかのパフォーマンス プロファイリングを行っているときに、リストをスクロールしているときに、CPU の 62% が使用され、DataTemplate
. VirtualizationMode="Recycling"
すべてを再利用し、UIElements
新しいインスタンスを作成したり、古いインスタンスを破棄したりする必要がないことを理解していたListBox
ので、これはまさに起こってはならないことだと思います。
関連する XAML は次のとおりです。
<ListBox ItemsSource="{Binding EpisodeRows}" toolkit:TiltEffect.SuppressTilt="True" Margin="12,0" VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid VerticalAlignment="Top" Height="111" VirtualizingStackPanel.VirtualizationMode="Recycling" >
<StackPanel Orientation="Horizontal" Visibility="{Binding TilesVisibility}">
<landerGame:LevelTileUserControl PartText="{Binding PartText_1}" ScoreText="{Binding ScoreText_1}" Star1Visibility="{Binding Star1Vi
<landerGame:LevelTileUserControl PartText="{Binding PartText_2}" ScoreText="{Binding ScoreText_2}" Star1Visibility="{Binding Star1Vi
<landerGame:LevelTileUserControl PartText="{Binding PartText_3}" ScoreText="{Binding ScoreText_3}" Star1Visibility="{Binding Star1Vi
<landerGame:LevelTileUserControl PartText="{Binding PartText_4}" ScoreText="{Binding ScoreText_4}" Star1Visibility="{Binding Star1Vi
<landerGame:LevelTileUserControl PartText="{Binding PartText_5}" ScoreText="{Binding ScoreText_5}" Star1Visibility="{Binding Star1Vi
<landerGame:LevelTileUserControl PartText="{Binding PartText_6}" ScoreText="{Binding ScoreText_6}" Star1Visibility="{Binding Star1Vi
</StackPanel>
<TextBlock VerticalAlignment="Top" Text="{Binding EpisodeTitleText}" Style="{StaticResource PhoneTextExtraLargeStyle}" Margin="0,0,0,5"
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
リストをスクロールしている間のパフォーマンス プロファイリング結果のスクリーンショットを次に示します。
リストは次のようになります (ゲームのレベル選択です)。
私は周りを見回して、VirtualizationMode="Recycling"
うまくいかないように見える記事を見つけました。この時点で、どんな洞察も非常に高く評価されます。
編集:このプロジェクトに関連する完全なコードをアップロードしました。誰もがここで試してみたいと思っています: http://maketag.net/landerGame.rar