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

时间:2010-11-11 00:12:34

标签: .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
}

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

        for (int i = 1; i < 2000; i++)
        {
            _rowViewModels.Add(new RowViewModel(i));
        }

然后绑定到datagrid。非常简单:

        gridControl.DataSource = _rowViewModels;

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

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

滚动非常麻烦/慢。如果您有任何想法,请告诉我们。

1 个答案:

答案 0 :(得分:4)

.NET 40附带的数据网格可以正常工作。测试了200列和50K行(混合了int32,double,字符串和自定义类显示。

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

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