web-dev-qa-db-fra.com

Améliorez les performances de WPF DataGrid

Dans mon application .NET 3.5WPF, j'ai un WPFDataGrid qui sera rempli de 500 colonnes et 50 lignes. Les performances de l'App sont très très médiocres dans le défilement, ou quand je fais DataGrid.Items.Refresh() ou dans la sélection des lignes.

En fait, l'application mettra environ 20 secondes pour mettre à jour la mise en page. Layout_Updated() l'événement se déclenchera après 20 secondes.

Si je réduis les colonnes à 50 ou moins, l'application sera très réactive. Selon mes résultats, les performances sont directement liées au nombre de colonnes.

Comment puis-je améliorer les performances de DataGrid?

27
Kishor

Il existe quelques options que vous pouvez activer pour vous aider sur votre DataGrid objet

EnableColumnVirtualization = true
EnableRowVirtualization = true

Ces deux sont les principaux qui, je pense, pourraient aider. Essayez ensuite de rendre votre liaison asynchrone

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

Et enfin, j'ai entendu dire que définir une hauteur et une largeur maximales peut aider même si elles dépassent la taille maximale de l'écran, mais je n'ai pas remarqué de différence moi-même (la réclamation concernait la mesure automatique de la taille)

MaxWidth="2560"
MaxHeight="1600"

Ne placez jamais non plus un DataGrid dans un ScrollViewer, car vous perdrez essentiellement la virtualisation. Faites-moi savoir si cela aide!

70
Alan

Vérifiez si vous avez une propriété ScrollViewer.CanContentScroll set False. Définir cette propriété sur false désactive la virtualisation d'une manière qui dégradera les performances de votre Data-grid. Pour plus de précisions, reportez-vous à cette CanContentScroll

4
Rajat Ghalni

Essayez peut-être cela au lieu de charger les 50 lignes à la fois

http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization

0
Constanta