我想测量 VirtualizingStackPanel 的性能。以下是我正在使用的步骤。
- 创建 1000 个项目,如果没有虚拟化,UI 将冻结,这非常简单。
- 我可以使用 Snoop 来显示它只加载可见的项目
现在我想证明当我滚动时,它只加载其他几个项目。有什么事件可以用来证明这一点吗?有没有其他方法可以证明这一点?
请指导。
我想测量 VirtualizingStackPanel 的性能。以下是我正在使用的步骤。
现在我想证明当我滚动时,它只加载其他几个项目。有什么事件可以用来证明这一点吗?有没有其他方法可以证明这一点?
请指导。
为什么需要证明这一点?将新属性添加到您的结构中,例如 IsNotInMemory。您可以将其添加到您的 ItemsTemplate:
<CheckBox x:Name="win" IsChecked="{Binding IsNotInMemory, Mode=OneWayToSource}"
Visibility="Collapsed"
>
然后,您可以添加另一个禁用了虚拟化的 ListBox,它直接与 IsNotInMemory 绑定。然后,您可以查看哪些项目当前在内存中,哪些不在。当您滚动第一个列表框时,您会看到项目正在被一个一个地加载到内存中(EG TRUE 变为 false。)
或者,您可以将自己挂接到 DataTemplate 的 Loaded&Unloaded 事件中。请注意,如果您使用 VirtualizingMode=Recycling,您可能不会收到任何 Unloaded 事件,因为它们正在被回收。在这种情况下,您还可以将自己挂接到 DataContextChanged 事件中。