如何衡量VirtualizingStackPanel的性能

时间:2012-09-02 12:20:23

标签: c# wpf performance

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

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

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

请指导。

1 个答案:

答案 0 :(得分:0)

为什么你需要证明这一点?向结构中添加新属性,例如IsNotInMemory。您可以将其添加到ItemsTemplate:

                        <CheckBox x:Name="win" IsChecked="{Binding IsNotInMemory, Mode=OneWayToSource}" 
                              Visibility="Collapsed"
                              >

然后,您可以添加另一个已禁用虚拟化的ListBox,它将直接绑定到IsNotInMemory。然后,您可以看到哪些项目当前在内存中,哪些项目不在内存中。当您在第一个列表框中滚动时,您会看到项目被逐个加载到内存中(EG TRUE变为false。)

或者你可以将自己挂钩到DataTemplate的Loaded&amp; Unloaded事件中。请注意,如果您使用VirtualizingMode = Recycling,您可能不会收到任何Unloaded事件,因为它们正在被回收。在这种情况下,您也可以将自己挂钩到DataContextChanged事件中。