Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

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

[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

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 1 heure et 21 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 2 heures et 35 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 16 heures et 15 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 17 heures et 11 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 17 heures et 26 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18