C# DataGrid通过虚拟化收集获得大量行,但滚动速度仍然很慢

C# DataGrid通过虚拟化收集获得大量行,但滚动速度仍然很慢,c#,wpf,.net-4.0,C#,Wpf,.net 4.0,我在我的C#应用程序(WPF,.NET 4.0)中设置了当前的DataGrid: ItemsSource绑定到我自己制作的集合。该集合为IList,是只读的,并且在调用此[int index]时动态生成Foo对象 列是在代码中生成的,因为Foo包含一个对象数组,我希望该数组中的每个项都有一列。数组中的所有Foo对象在数组中的项数都相同。列的总数很少超过5 集合中可能有超过int.MaxValue行,因此我在集合中添加了代码,使其具有常规Count属性所基于的LargeCount和LargeOf

我在我的C#应用程序(WPF,.NET 4.0)中设置了当前的
DataGrid

  • ItemsSource
    绑定到我自己制作的集合。该集合为
    IList
    ,是只读的,并且在调用
    此[int index]
    时动态生成
    Foo
    对象
  • 列是在代码中生成的,因为
    Foo
    包含一个对象数组,我希望该数组中的每个项都有一列。数组中的所有
    Foo
    对象在数组中的项数都相同。列的总数很少超过5
  • 集合中可能有超过
    int.MaxValue
    行,因此我在集合中添加了代码,使其具有常规
    Count
    属性所基于的
    LargeCount
    LargeOffset
    属性,然后我可以使用这些属性来分页数据
在使用
int.MaxValue
行测试了
DataGrid
之后,我发现控件在滚动时非常缓慢。
DataGrid
可以快速显示数据的顶部(即第0行位于顶部)。但是,如果通过单击滚动条中的某个位置快速滚动,则在显示新行之前,
DataGrid
会挂起10秒以上。挂起时间的大小与我单击滚动条的距离成比例

从任何位置逐行向下滚动(通过滚动条的向下箭头按钮)都可以,但是逐行向上滚动会挂起一秒钟

我已将
DataGrid
设置为在标记中具有以下属性,以确保虚拟化正常工作:

ColumnWidth="200"
RowHeight="21"
CanUserResizeRows="False"
EnableColumnVirtualization="True"
ScrollViewer.IsDeferredScrollingEnabled="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
VirtualizingStackPanel.IsVirtualzing="True"
我在网上查了很多关于修复这个问题的信息,但没有看到任何值得的东西。现在,我要将集合的max
Count
值设置为远小于
int.MaxValue
的值,但我希望这里的人能帮助我加快滚动速度,这样我的用户就不必进行太多的分页