40 votes

OrderBy().Last() ou OrderByDescending().First() performance

Je sais que c'est probablement une micro-optimisation, mais je me demande quand même s'il y a une différence dans l'utilisation de

var lastObject = myList.OrderBy(item => item.Created).Last();

ou

var lastObject = myList.OrderByDescending(item => item.Created).First();

Je cherche des réponses pour Linq aux objets et Linq aux Entités.

19voto

Henk Holterman Points 153608

En supposant que les deux méthodes de tri prennent le même temps (et c'est un grand « si »), alors la première méthode aurait le coût supplémentaire de faire un .Last(), nécessitant potentiellement une énumération complète.

Et cet argument est probablement encore plus fort pour un LINQ orienté SQL.

4voto

Omer Raviv Points 4100

Je suis désolé que ça ne réponde pas directement à votre question, mais...

Pourquoi ne pas faire une meilleure optimisation et utiliser les implémentations de Jon Skeet de MaxBy ou MinBy ?

Ce sera O(n) par opposition à O(n log n) dans les deux alternatives que vous avez présentées.

2voto

shelleybutterfly Points 2535

juste mes deux cents : puisque OrderBy OrderByDescending doivent itérer sur tous les objets de toute façon, il ne devrait pas y avoir de différence. cependant, si c'était moi, je passerais probablement par tous les éléments dans un foreach avec une comparaison pour tenir l'élément de comparaison le plus élevé, qui serait une recherche O(n) au lieu de n'importe quel ordre de grandeur le tri est.

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