2011-05-17 30 views
0

我做了一個簡單示例,它顯示了SL4和SL5測試版上DataGrid的低性能。 作爲佈局根我有當水平滾動時,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; 

然後,我創建DataGridTextColumn類型的50列:

 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

嘗試將「EnableColumnVirtualization」和/或「EnableRowVirtualization」設置爲true。這已經解決了我過去的問題。

+0

這些屬性存在於WPF DataGrid上,而不是SL DataGrid上。 – 2011-05-18 08:15:28

+0

(抱歉,延遲,家庭緊急情況)嗯,我必須在Telerik的RadGridView上測試過,因爲我只在SL中工作。 – 2011-05-22 21:14:52