我做了一个简单的例子,显示了SLG和SL5 beta上DataGrid的低性能。 作为布局根我有
<sdk:DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="dataGrid1" />
然后在我设置的代码中:
dataGrid1.RowHeight = 30;
dataGrid1.MaxColumnWidth = 200;
dataGrid1.MinColumnWidth = 200;
dataGrid1.RowHeaderWidth = 10;
然后我创建50列DataGridTextColumn类型:
for(int i=0; i<50; i++) {
DataGridTextColumn col = new DataGridTextColumn {
Header = "Column "+i,
CanUserReorder = true,
CanUserResize = true,
CanUserSort = true,
MinWidth = colWidth,
MaxWidth = colWidth,
Width = new DataGridLength(colWidth, DataGridLengthUnitType.Pixel),
Binding = new Binding(string.Format("C{0}", i)),
};
dataGrid1.Columns.Add(col);
}
然后是100行:
private void CreateRows()
{
var rows = new ObservableCollection<RowInfo>();
for(int i=0; i<100; i++) {
RowInfo row = new RowInfo();
for(int j=0; j<50; j++) {
typeof(RowInfo).GetProperty("C"+j).SetValue(row, Guid.NewGuid().ToString(), null);
}
rows.Add(row);
}
dataGrid1.ItemsSource = rows;
}
RowInfo是一个包含以下属性的简单对象:
public string C0 { get; set; }
... till
public string C49 { get; set; }
当我运行应用程序并获取网格时,它完全占用了我的浏览器标签。 但是当我水平滚动到结束时 - 它变得太慢而且CPU使用率超过60%。 滚动第二次会更快,但仍然很慢。 这对我们的应用至关重要。 您对如何提高性能有任何建议吗?
答案 0 :(得分:0)
尝试将“EnableColumnVirtualization”和/或“EnableRowVirtualization”设置为true。这解决了我过去的滞后问题。