-1

我想测量 VirtualizingStackPanel 的性能。以下是我正在使用的步骤。

  • 创建 1000 个项目,如果没有虚拟化,UI 将冻结,这非常简单。
  • 我可以使用 Snoop 来显示它只加载可见的项目

现在我想证明当我滚动时,它只加载其他几个项目。有什么事件可以用来证明这一点吗?有没有其他方法可以证明这一点?

请指导。

4

1 回答 1

0

为什么需要证明这一点?将新属性添加到您的结构中,例如 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 事件中。

于 2012-09-02T15:58:03.697 回答