加载大量数据时,慢速和Stuttery WPF网格滚动(40列,2000行)

Gau*_*rma 5 .net wpf performance datagrid wpfdatagrid

简而言之,当加载大量纯数据时,我们无法从任何类型的WPF网格/项目控件中获得合理的滚动性能.

我们使用DevExpress WPF网格创建了一个静态独立原型并将其上传到此处:

http://jump.fm/QOTDL

我们也尝试过Infragistics和Xceed网格,问题是一样的.

看起来WPF根本无法处理显示大量数据的合理大数据网格,只要提供流畅的用户体验即可.即使没有任何类型的数据绑定,只需提供静态数据(大约40列,2000行),滚动即可.在最低级别,分析器似乎表明除了大量垃圾收集之外还会发生过量的"测量",这可能是不规则口吃的原因.

原型中的代码可以轻松替换为与其他网格一起使用.如果有人能够在场景中产生平滑的滚动体验,特别是在数据分组在多个级别并且密集的情况下,请告诉我们,我们非常有兴趣听取您的意见.

额外细节:

我们正在创建2000个对象(每个具有约40个属性),并将它们分配给网格的数据源属性.

我们的每个对象都表示为类似于下面的类:

public class RowViewModel
{
    public double AskAsw { get; set; }
    public string AskBmkName { get; set; }
    public double AskBmkPrice { get; set; }
    public double AskBmkSprd { get; set; }
    ... and so on
}
Run Code Online (Sandbox Code Playgroud)

这些是创建的,并添加到集合/列表中,如下所示:

        for (int i = 1; i < 2000; i++)
        {
            _rowViewModels.Add(new RowViewModel(i));
        }
Run Code Online (Sandbox Code Playgroud)

然后绑定到datagrid.很简单:

        gridControl.DataSource = _rowViewModels;
Run Code Online (Sandbox Code Playgroud)

这导致数据网格显示此信息.我们将字体缩小(10px,根据用户的要求),并自动调整大小并对列进行分组.结果看起来与此类似:

http://i54.tinypic.com/21jt11t.png

而且滚动非常恶劣/缓慢.如果您有任何想法,请告诉我们.

小智 4

.NET 40 附带的数据网格可以很好地解决这个问题。使用 200 列和 50K 行进行测试(int32、double、字符串和自定义类显示的混合)。

有一些标志可以打开行和列虚拟化。但请记住,如果您正在进行分组,则会破坏行虚拟化。

我通过使用自己的向下钻取(两个表)用户控件来获得分组功能来解决这个问题。不是很好,但足以满足我的需求。