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) :
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.