简而言之,当使用大量纯数据加载WPF网格/项控件时,我们无法获得合理的滚动性能。
我们使用DevExpress WPF网格创建了一个静态独立原型,并在此处上传: 我们也尝试过使用Infragistics和Xceed网格,但问题仍然存在。
似乎WPF无法处理显示大量数据的相对较大数据网格以提供流畅的用户体验。即使没有任何类型的数据绑定,仅提供静态数据(~40列宽,2000行),滚动也会变得缓慢。在最低级别上,分析器似乎表明“Measure”发生过多,除了大量的垃圾收集外,这可能是不规则卡顿的原因。
原型中的代码可以轻松替换为其他网格。如果有人能够在给定场景中产生平滑的滚动体验,特别是在数据被分组到多个级别且密集包装的情况下,请告诉我们,我们非常感兴趣。
额外的细节:
我们创建了2000个对象(每个对象有~40个属性),并将它们分配给网格的数据源属性。
我们的每个对象都表示为类似以下内容的类:
这些代码可以这样创建并添加到一个集合/列表中:
这将导致一个数据网格显示此信息。我们将字体缩小(10px,按用户要求),并自动调整大小和分组列。结果看起来类似于这样: 滚动非常卡顿/缓慢。如果您有任何想法,请告知我们。
我们使用DevExpress WPF网格创建了一个静态独立原型,并在此处上传: 我们也尝试过使用Infragistics和Xceed网格,但问题仍然存在。
似乎WPF无法处理显示大量数据的相对较大数据网格以提供流畅的用户体验。即使没有任何类型的数据绑定,仅提供静态数据(~40列宽,2000行),滚动也会变得缓慢。在最低级别上,分析器似乎表明“Measure”发生过多,除了大量的垃圾收集外,这可能是不规则卡顿的原因。
原型中的代码可以轻松替换为其他网格。如果有人能够在给定场景中产生平滑的滚动体验,特别是在数据被分组到多个级别且密集包装的情况下,请告诉我们,我们非常感兴趣。
额外的细节:
我们创建了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));
}
然后绑定到数据网格。非常简单:
gridControl.DataSource = _rowViewModels;
这将导致一个数据网格显示此信息。我们将字体缩小(10px,按用户要求),并自动调整大小和分组列。结果看起来类似于这样: 滚动非常卡顿/缓慢。如果您有任何想法,请告知我们。