2011-11-15 63 views
2

當Datagrid上的.ItemsSource設置爲集合時,我總是遇到主要的性能問題。該方法返回的速度很快,但在屏幕實際呈現任何內容之前存在非常明顯的延遲。由於Datagrid設置了虛擬化模式,因此它應該能夠輕鬆處理非常大的集合。我在項目集合的綁定屬性中打印出一些調試信息,以確保它不會加載整個集合,但它只訪問前幾個項目,所以我確信虛擬化正在工作。即使對於小型集合,延遲也是大致相同的,所以它與實際的數據加載似乎無關。GridView vs DataGrid性能

所以它純粹是導致放緩的渲染。大多數情況下,這是由於在ScrollViewer中包含Datagrid,或者自動生成行高等引起的。但是我通過給出所有固定寬度來確定所有可能的原因,並確保沒有設置爲「無限」或「自動」。

把我的頭髮拉出來幾個星期後,我試了一件簡單的事情:我換了一個GridView的Datagrid。令我驚訝的是它不會受到大的延遲,它會立即着色。兩者具有完全相同的屬性和樣式,所以我試圖理解爲什麼Datagrid太慢了。

是否有任何邏輯的原因,爲什麼DataGrid可能比GridView慢?

回答

0

比較屬性,事件和方法的數量。 DataGrid有一個編輯模板。 DataGrid只是一個更重的權重控件,GridView是爲了速度而構建的。

0

DataGrid總是會很慢,但通過使用EnableRow/ColumnVirtualization屬性爲true(不知道您是否已經這樣做)並將固定列寬設置爲true可以獲得(相當)顯着的性能提升導致要執行的佈局的重新計算更少。

建議取自here