Quel est le plus efficace boucle en c#

Il y a un certain nombre de façon différente de faire la même boucle simple si les éléments d'un objet en c#.

Cela m'a fait me demander si il n'y a aucune raison d'être la performance de l'informatique ou de la facilité d'utilisation, à utiliser sur le dessus de l'autre. Ou est-il juste en bas à la préférence personnelle.

Prendre un objet simple

var myList = List<MyObject>; 

Permet de supposer l'objet est rempli et nous voulons effectuer une itération sur les éléments.

Méthode 1.

foreach(var item in myList) 
{
   //Do stuff
}

Méthode 2

myList.Foreach(ml => 
{
   //Do stuff
});

Méthode 3

while (myList.MoveNext()) 
{
  //Do stuff
}

Méthode 4

for (int i = 0; i < myList.Count; i++)
{
  //Do stuff   
}

Ce que je me demandais c'est de faire chaque de ces compilé vers le bas pour la même chose? est-il un clair avantage de performance pour l'utilisation de l'un sur l'autres?

ou est-ce juste en bas à la préférence personnelle, lors du codage?

Ai-je raté quelque?

  • Vous pouvez toujours faire votre propre indice de référence, si vous voulez savoir comment ils diffèrent par leurs performances. System.Diagnostics.StopWatch est votre ami
  • voir ceci : forums.asp.net/t/1041090.aspx
  • Vous avez manqué le do .. while(). En plus de cela, pourquoi ne pas compiler, et regardez les résultats dans ILDASM?
  • Avez-vous de référence de la performance? Que faisaient vos résultats? En grande partie, à tout de votre propre logique va être le goulot d'étranglement, comment vous parcourez en grande partie négligeable, et parfois dictée par la situation. Peu un non-problème, purement académique question.
  • Je me demandais si quelqu'un savait déjà, avant j'aller et de réinventer la roue..
  • Certaines choses que vous devriez refaire.
  • Je suppose que Parallèle.ForEach() serait plus rapide.
  • Utiliser ce qui est plus lisible (pour vous) et ce que vous avez besoin. Donc, si vous souhaitez modifier la mise en œuvre des modifications ultérieures de l' List<MyObject> à IEnumerable<MyObject> et l'utilisation foreach ou si vous n'avez pas besoin d'indices, de toute façon. Je dois avouer que je n'ai jamais utilisé List.ForEach dans les 10 dernières années pour plus de réponses sur DONC.
  • Question intéressante, après la lecture de Sam1 lien, il montre que, pour la et, tandis que les produits de la même MSIL donc, c'est essentiellement le même. Pour chacun, c'est plus lent, car il utilise l'interface IEnumerable et aussi quelques casting est nécessaire, car les types de savoir.
  • Oui Do { //do stuff } while(true) est manquant, mais ce n'est functionaliy différents pour les autres boucles que ce sera toujours de faire au moins une itération de votre //Do stuff quelle que soit la condition.
  • [foreach vs Linq] (geekswithblogs.net/BlackRabbitCoder/archive/2010/04/23/...)
  • La question est étroitement liée stackoverflow.com/questions/6058390/when-to-use-which-for
  • Remarque ce n'est pas un doublon de stackoverflow.com/q/6058390/50776 que @Jodrell souligné; le champ d'application de la que l'on comprend les extensions Parallèles, ce qui élargit la portée de la question (et modifie les réponses) grandement.
  • c'est un bon point, le choix des extensions parallèles ou PLINQ pourrait avoir un effet significatif sur les performances. Cependant, les deux questions pourraient être fusionnés en un seul meilleure ressource.
  • Pas vraiment, parce que les réponses de ici serait défaut; ils n'avaient pas fournir tous les détails concernant l'PLINQ. C'est un mauvais candidat pour la fusion.

InformationsquelleAutor TheAlbear | 2013-03-06