2010-09-30 2 views
1

J'ai une fenêtre avec un DataGrid montrant des données groupées.WPF DataGrid est extrêmement lent, comment puis-je améliorer le temps de chargement initial?

Je charge environ 4 x 300 éléments dans le DataGrid WPF qui sont regroupés en 4 groupes. Le regroupement désactive la virtualisation.

Je mets IsAsync = "True" donc ma fenêtre s'ouvre rapidement mais le DataGrid est juste rempli APRES 11 SECONDES ???

Que puis-je faire pour accélérer le chargement/l'affichage de mes données?

Répondre

2

Vous l'avez déclaré vous-même: le regroupement désactive la virtualisation; Je pense pour l'instant montrer chaque groupe séparément (dans sa propre grille de données) est le chemin à parcourir si possible ... ou une autre astuce similaire pour ne pas afficher tous les éléments en utilisant le groupement.

Beaucoup plus tard edit: Il y a en fait tout à fait une écriture-up intéressant à http://jerryclin.wordpress.com/2008/02/22/listbox-grouping-and-virtualization/ sur la façon de s'y prendre pour faire des choses si vous avez vraiment besoin de regroupement ListBox avec la virtualisation. Pas sûr que ça en vaille la peine, mais c'est possible.

+0

+1. J'ai contourné ce problème en utilisant deux grilles dans un style maître/détail. Réduction de l'utilisation de la mémoire d'environ 3 Go à quelque chose de beaucoup plus raisonnable! – RichardOD

0

Je ne sais pas si c'est lié, mais j'ai eu un problème similaire avec le DataGrid dans lequel il a fallu littéralement secondes pour actualiser après un redimensionnement de fenêtre, tri de colonne, etc et verrouillé l'interface utilisateur de la fenêtre (1000 rangées, 5 colonnes).

Il s'agissait d'un problème (bug?) Avec les calculs de dimensionnement WPF. Je l'avais dans une grille avec le RowDefinition Height = "Auto" qui provoquait le système de rendu pour essayer de recalculer la taille du DataGrid à l'exécution en mesurant la taille de chaque colonne et rangée, vraisemblablement en remplissant la grille entière (si je comprends bien). Il est censé gérer cela intelligemment, mais dans le cas présent, ce n'était pas le cas.

Une vérification rapide pour voir s'il s'agit d'un problème lié consiste à définir les propriétés Height et Width du DataGrid sur une taille fixe pendant la durée du test, puis à réexécuter. Si votre performance est rétablie, une solution permanente peut être parmi ces options:

  • Modifier la taille des éléments contenant à être relative (*) ou valeurs fixes
  • Set MaxHeight et MaxWidth du DataGrid à un valeur fixe plus qu'elle pourrait obtenir en utilisation normale
  • un autre type de conteneur avec une stratégie différente de redimensionnement (Grille, DockPanel, etc.)
Questions connexes