我已经制作了一个很好的小三项宽列表作为开关工作的瓷砖。它看起来像这样:
看起来不错吧?好吧,我在垂直滚动列表中有大约 130 个这样的图块,加载需要很长时间。根据性能分析工具,每个元素渲染大约需要 18 毫秒——这给了我大约 2.3 秒的渲染时间。在设备上,它通常是那个时间的两倍。这并不是真正的危机,但在绘制这些元素之前,UI 是完全黑色的并且没有响应。
在网上进行了一些研究后,我意识到这是因为WrapPanel
工具包中的控件没有虚拟化它的项目 - 因此GPU
一次渲染所有对象(在此过程中占用了大量内存)。
现在,有什么方法可以让这一切变得更快吗?
XAML:
<ListBox x:Name="ChannelsListBox" Grid.Row="2" Margin="0,40,0,0">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.Template>
<ControlTemplate>
<ItemsPresenter />
</ControlTemplate>
</ListBox.Template>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid x:Name="ChannelTile" Margin="6,6,6,6" Tap="ChannelTile_Tap">
<!-- context menu code removed -->
<Rectangle Width="136" Height="136" Fill="{StaticResource LightGrayColor}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
的ListBox
ItemsSource 设置在代码隐藏中 - 如果您想知道的话。