在我正在开发的 Windows Phone 7.5 应用程序中,我遇到了一些性能问题。我有一个ListBox
正在使用VirtualizationMode="Recycling"
的和一个DataTemplate
. 除了性能不佳之外,它似乎工作正常。在进行一些性能分析时,我看到,当我滚动列表时,多达 62% 的 CPU 被用于创建我放置在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