在水平滚动时,DataGrid在SL4和SL5 beta上太慢了

时间:2011-05-17 14:25:03

标签: silverlight silverlight-4.0 datagrid

我做了一个简单的例子,显示了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%。 滚动第二次会更快,但仍然很慢。 这对我们的应用至关重要。 您对如何提高性能有任何建议吗?

1 个答案:

答案 0 :(得分:0)

尝试将“EnableColumnVirtualization”和/或“EnableRowVirtualization”设置为true。这解决了我过去的滞后问题。