Parcours d'une liste (List<T>) et performances en Silverlight

Dans le cadre du développement d’un contrôle Silverlight devant faire un grand nombre de parcours sur une liste (List), je me suis posé la question des performances.

Que faut-il utiliser ? foreach, for, while ou ForEach contenu dans System.Linq ?

Mes tests se sont portés sur une application Silverlight classique ainsi que sur Windows Phone 7 (tests sur un vrai device).

Le test consiste à parcourir une liste d’objets de type Test (la classe Test contenant une propriété Id de type int et une propriété Name de type string). Chaque type d’itération doit mettre en majuscule la propriété Name et ajouter 1 à la propriété Id.

Pour Silverlight la liste contient 10 000 000 éléments alors qu’il n’y en a que 100 000 pour Windows Phone 7.

Voici les résultats (en secondes) :

Bench

Le grand gagnant est le foreach sur les 2 plateformes suivi du ForEach de Linq puis du for et du while.

Il est a noté que pour un nombre d'éléments moins important dans la liste sur Windows Phone 7 (jusqu'à environ 30 000 dans mon cas), le while passe assez nettement devant le ForEach de Linq.


Voir également