我正在使用.NET 4.0 WPF DataGrid
,綁定到ObservableCollection<T>
。該集合每行添加和刪除幾行。 DataGrid
包含在TabControl
/TabItem
/Grid
中。WPF DataGrid隱藏後很慢刷新
只要我讓它可見,它或多或少都可以。如果我轉到應用程序中的其他選項卡,幾分鐘後回來,UI線程鎖定30秒(總共約1200行,其中約40個在屏幕上)。所有的行數據已經在內存中,所以沒有I/O。所有綁定的屬性都是簡單的字符串,數字或日期,或者創建它們的邏輯非常簡單;計算起來並不複雜或耗時。
當超過幾百行時,選擇一個新的列進行排序非常緩慢。添加一個新行也似乎很慢。如果我切換到另一個選項卡,然後再右轉,網格會很快出現。
調整窗口大小性能很好。
起初滾動性能很慢,但在網格完全加載之後纔會獲得;它從來都不是很棒。沒有ScrollView.CanContentScroll="False"
,滾動非常緩慢以至於無法使用。在用戶放開滾動條後,使用IsDeferredScrollingEnabled="True"
會導致渲染速度延遲10+秒,但仍然是不可接受的用戶體驗。
There are 17 DataGridTextColumns
。有幾列使用自定義StringFormats
,但沒有什麼複雜的。沒有TypeConverters
。
Visual Studio性能工具/分析器一直沒用。這似乎是一個相對簡單/直接的設置。任何有關如何提高性能的建議,將不勝感激。
我也想知道爲什麼這是SO慢。
<DataGrid x:Name="MyGrid" AutoGenerateColumns="False" Margin="3,35,3,20" VerticalContentAlignment="Center" Width="Auto"
FontSize="12" FontFamily="Consolas" ScrollViewer.CanContentScroll="False"
CanUserResizeRows="False" AlternationCount="2" AlternatingRowBackground="#FFE3F0FF"
VirtualizingStackPanel.VirtualizationMode="Recycling" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="XX" Binding="{Binding Path=XX}" />
<DataGridTextColumn Header="YY" Binding="{Binding Path=YY, StringFormat={}{0:0.0}}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextAlignment" Value="Right" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
. . .
</DataGrid.Columns>
</DataGrid>
是否有可能提供一個小而完整的代碼,允許重現您的問題? – Sisyphe