Dans mon application .NET 3.5
WPF
, j'ai un WPF
DataGrid
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
?
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!
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
Essayez peut-être cela au lieu de charger les 50 lignes à la fois
http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization