Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[WPF] Améliorer les performances lors du tri d’une CollectionView

Lorsque l’on utilise une CollectionView, il est possible d’utiliser la propriété SortDescription pour trier la vue:

cvs.SortDescriptions.Clear();

cvs.SortDescriptions.Add(new SortDescription("Lastname", ListSortDirection.Ascending));

Le seul problème de cette technique, c’est que la vue est rafraichie 2 fois:

  • Lorsque l’on appelle la méthode Clear
  • Lorsque l’on appelle la méthode Add

En effet, chacune de ces méthodes déclenche l’évènement CollectionChanged qui provoque un rafraichissement de la vue.

Dans le cas de petite collections, pas de problèmes cependant, dans le cas de grande collection, trier 2 fois la vue peut-être assez vite désastreux en termes de performances. Pour remedier à cela, il est possible d’utiliser la méthode DeferRefresh de la classe CollectionView:

using (cvs.DeferRefresh())

{

    cvs.SortDescriptions.Clear();

    cvs.SortDescriptions.Add(new SortDescription("Lastname", ListSortDirection.Ascending));

}

De cette façon, la vue ne sera rafraichie qu’une seule fois. Toutes les méthodes, propriétés, etc. à l’intérieur du bloc using ne provoqueront pas de rafraichissement mais indiqueront qu’il est nécessaire d’en faire un. A la fin du bloc, la méthode (privée) EndDefer est appelée et une rafraichissement de la vue est effectué !

 

A+

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mardi 13 janvier 2009 10:48 par Thomas LEBRUN
Classé sous : ,

Commentaires

EliseD a dit :

coucou

j'ai fait un test et je n'ai trouvé aucune amélioration visible, sur une GridView affichant environ 19000 lignes. Tu as un projet exemple à déposer, pour le voir en situation ?

# janvier 14, 2009 17:44

Thomas LEBRUN a dit :

Salut Elise,

Je n'ai pas d'exemple mais ce que je peux te dire, c'est que j'ai testé cela suite à une demande (charger puis trier environ 25K de lignes..... je fais que tester moi :) et c'est ce que j'ai trouvé pour améliorer un peu les choses, après tests et recherches.

On a peut-être pas gagné grand chose mais même un peu, c'est mieux que rien !

De plus, j'ai remarqué que cela était surtout valables sur les développements/réalisation pré-SP1 (.NET 3.5).

# janvier 14, 2009 18:23
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 17 heures et 40 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le il y a 20 heures et 13 minutes

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39