147 votes

Déclaration Linq plus rapide que la boucle foreach

J'écris à un gestionnaire de Mesh Rendering et je pense que ce serait une bonne idée de regrouper toutes les maillages utilisant le même shader, puis de les rendre, je suis dans cette passe. J'utilise actuellement une boucle foreach, mais je me demandais si l'utilisation de Linq pourrait augmenter mes performances.

253voto

codymanix Points 12119

Pourquoi LINQ devrait-il être plus rapide? Il utilise également des boucles en interne.

La plupart du temps, LINQ sera un peu plus lent car il introduit des frais généraux. N'utilisez pas LINQ si vous vous souciez beaucoup de la performance. Utilisez LINQ parce que vous voulez un code plus court, mieux lisible et maintenable.

67voto

Marc Gravell Points 482669

LINQ-to-Objets généralement va ajouter un peu marginal des frais généraux (plusieurs itérateurs, etc). Il a encore à faire les boucles, et a délégué l'invoque, et ont généralement pour une déférence pour obtenir capturé variables etc. Dans la plupart des code ce sera pratiquement indétectable, et plus de conférée par la plus simple à la compréhension du code.

Avec d'autres fournisseurs LINQ comme LINQ-to-SQL, puis depuis la requête peut filtrer sur le serveur, ça devrait être beaucoup mieux qu'un appartement foreach, mais plus probablement, vous n'auriez pas fait une couverture en "select * from foo" de toute façon, donc ce n'est pas nécessairement une comparaison équitable.

Re PLINQ; le parallélisme peut réduire les écoulé le temps, mais le total des temps CPU sera généralement augmenter un peu la raison pour les frais généraux de la gestion des threads, etc.

18voto

Jouke van der Maas Points 2423

Linq est plus lent maintenant, mais pourrait aller plus vite à un moment donné. La bonne chose à propos de Linq est que vous n'avez pas à vous soucier de la façon dont cela fonctionne. Si une nouvelle méthode est conçue pour être incroyablement rapide, les employés de MS peuvent l’appliquer sans même vous le dire et votre code serait beaucoup plus rapide.

Plus important encore, Linq est simplement beaucoup plus facile à lire. Cela devrait être une raison suffisante.

18voto

Pranay Rana Points 69934

Je pense que linq est préférable d'utiliser overfor loop car il vous donne un code beaucoup plus propre et facile à comprendre. Mais linq est plus lent que foreach. obtenir plus passer par ci-dessous article

LINQ vs FOREACH vs FOR Boucle Performance

9voto

mcintyre321 Points 5393

Vous obtiendrez peut-être de meilleures performances si vous utilisez Linq en parallèle pour plusieurs cœurs http://msdn.microsoft.com/en-us/library/dd460688.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X