WPF平臺Grid控件性能比較及測試結(jié)果
環(huán)境 本次測試的基準(zhǔn)創(chuàng)建于2016年6月,使用了以下Grid控件: 下的DataGrid (PresentationFramework.dll的一部分) C1FlexGrid 4.4
環(huán)境
本次測試的基準(zhǔn)創(chuàng)建于2016年6月,使用了以下Grid控件:
- 下的DataGrid (PresentationFramework.dll的一部分)
- C1FlexGrid 4.4.0.20162.514 (ComponentOne WPF版)
- C1DataGrid 4.4.0.20162.514 (ComponentOne WPF版)
- XamDataGrid v16.1.16.1.20161.1000 (WPF Controls - Infragistics)
- GridControl v15.2.15.2.10.0 (WPF Controls | DevExpress)
- SfDataGrid 14.1400.0.41 (Syncfusion Essential Studio WPF版)
- RadGridView 2016.2.503.40 (Telerik WPF Controls | UI WPF版)
- DataGridControl v5.9.5.9.16204.15420 (Xceed DataGrid for WPF)
測試運(yùn)行在ENVY-23 All-in-One Desktop環(huán)境中,配置如下:
- Intel i7 quad-core CPU @ 3.10 GHz
- 8 GB RAM
- NVIDIA GeForce GT 630M display adapter, Full HD (1920 x 1080) resolution
- Windows 10 Pro 64-bit OS
測試應(yīng)用
基準(zhǔn)應(yīng)用程序允許選擇和運(yùn)行單獨(dú)的測試,或按順序運(yùn)行所有測試。您可以選擇每個測試運(yùn)行的次數(shù),以得到平均結(jié)果。為了減少其他因素的影響(如操作系統(tǒng)和其他應(yīng)用程序的交互),所有結(jié)果都運(yùn)行了10次。
基準(zhǔn)測試步驟
每個基準(zhǔn)測試按以下步驟進(jìn)行:
- 移除上一次測試創(chuàng)建的所有UI,并調(diào)用和GC.WaitForPendingFinalizers方法,確保垃圾回收不會影響下次測試;
- 初始化下次測試和Stopwatch計(jì)時器;
- 按需要的次數(shù)執(zhí)行測試;
- 測量總時間并計(jì)算平均結(jié)果;
- 記錄結(jié)果。
基準(zhǔn)1:創(chuàng)建控件并加載數(shù)據(jù)
該基準(zhǔn)創(chuàng)建一個用戶控件,包含一個用于測試的Grid,將其插入到可視化樹中并填充數(shù)據(jù)。
基準(zhǔn)2:重新加載數(shù)據(jù)到已存在的控件
該基準(zhǔn)將DataGrid的ItemsSource設(shè)置為null,清空數(shù)據(jù)和自動生成的列,然后將ItemsSource設(shè)置為一個新的ListCollectionView。
基準(zhǔn)3:排列單列
該基準(zhǔn)通過IcollectionView接口實(shí)現(xiàn)排序,大多數(shù)情況下通過這種方式進(jìn)行排列。但是Syncfusion的SfDataGrid沒有內(nèi)置支持,需要通過屬性來實(shí)現(xiàn)排序。對于Infragistics的XamDataGrid,我們使用屬性來實(shí)現(xiàn)排序。
基準(zhǔn)4和5:滾動100行和整個表格
這兩個基準(zhǔn)模擬最終用戶的交互,分別滾動100行和整個表格。每個Grid都有ScrollIntoView或類似方法來解決這個問題。
測試結(jié)果
在比較整個基準(zhǔn)過程中,我們得出以下結(jié)論:
- 初始化加載時間:不論數(shù)據(jù)規(guī)模,所有的控件幾乎都有相似的啟動時間。
- 固定寬度基準(zhǔn):對于包含1,000、10,000和100,000條數(shù)據(jù)的數(shù)據(jù)源,測試結(jié)果非常相似。
- 自動列寬基準(zhǔn):在運(yùn)行固定