Я сделал простой пример, который показывает низкую производительность DataGrid как на SL4, так и на SL5 бета.
Как макет корня у меня
<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; }
Когда я запускаю приложение и получаю сетку, он полностью занимает вкладку браузера.
Но когда я прокручиваю его по горизонтали до конца - он идет слишком медленно и загрузка процессора составляет более 60%.
Прокрутка во второй раз идет немного быстрее, но все еще медленно.
Это очень важно для нашего приложения.
Есть ли у вас какие-либо предложения по повышению производительности?