2012-12-07 108 views
21

在我的.NET 3.5WPF應用程序,我有一個WPFDataGrid將填充500列和50行。 應用程序的性能在滾動時非常差,或者當我做DataGrid.Items.Refresh()或選擇行時。改進WPF DataGrid性能

其實應用程序大約需要20秒來更新佈局。事件將在20秒後觸發。

如果我將列數減少到50或更少,應用程序將非常靈敏。根據我的發現,性能與列數直接相關。

如何提高DataGrid的性能?

+6

一個甚至有10列以上的網格可能不是一個好主意,但考慮'Custom Paging' – Boomer

+4

@ Boomer真的嗎?EVER看到了外匯網格? – TomTom

+0

@WPFK你有沒有考慮過使用第三個參數ty網格針對性能進行了優化? – TomTom

回答

57

有,你可以打開,以幫助你在你的的DataGrid對象

EnableColumnVirtualization = true 
EnableRowVirtualization = true 

這幾個選項,這兩個是我認爲可能有幫助的主要部分。接下來請嘗試將結合異步

ItemsSource="{Binding MyStuff, IsAsync=True}" 

最後,我聽說最好設置一個最高的高度和寬度可以幫助,即使它的最大屏幕尺寸上面,但我沒有發現有不同的自己(要求有具有自動尺寸測量做)

MaxWidth="2560" 
MaxHeight="1600" 

也從來沒有把一個DataGridScrollViewer,因爲你會失去基本的虛擬化。讓我知道如果這有幫助!

+0

我不認爲在.NET 4.0之前,EnableColumnVirtualization和EnableRowVirtualization纔可用。因此,在查看第一個建議之前,OP需要從3.5升級。 – Scott

+0

@Scott那麼這可能是一個合理的解決方案。對於OP,爲什麼使用.NET 3.5? .NET 4.0在XP SP3上可用,如果你想使用它們,許多第三方庫已經需要.NET 4.0。 – Alan

+0

@Alan偉大的人!它幫助了很多... – Kishor

0

IsAsync =真}」是一個使用此語句之後,應用程序讀取大量的在短的時間內記錄得更快,它爲我工作

+1

IAsync = True在哪裏?什麼?絕對不清楚 –

+0

看起來更進一步它說「ItemsSource =」{綁定MyStuff,IsAsync = True}「」 – Sam

1

檢查一下您是否屬性ScrollViewer.CanContentScroll設置False。 ...設置該屬性如果虛假地禁用虛擬化會降低數據網格的性能請參考這個CanContentScroll