2010-03-11 7 views
2

J'espérais que certains d'entre vous connaissiez la réponse à cette question. Lequel est plus vite? A ou BQuoi de plus rapide? sélectionnez [objet] ou sélectionnez nouveau {[objet] .value1, [objet] .value2} avec linq

A:

var item = from d in database 
      select d; 

B:

var item = from d in database 
      select new {d.item1, d.item2}; 

, il semble APPAREMMENT comme la sélection d'une partie de l'objet de la table serait plus rapide que la sélection de l'objet entier, mais quelque chose me dit son pas nécessairement le cas.

+7

Essayez-le cent mille fois dans les deux sens. Utilisez la classe StopWatch pour la chronométrer. Prendre une moyenne des résultats. Ensuite, vous connaîtrez la réponse. –

+0

Totalement d'accord avec Eric. Quand vous avez des doutes, mesurez. –

+0

Si c'est Linq-to-SQL, le second sera beaucoup plus rapide, le select peut être marginal, mais le manque de suivi d'objet sur un objet anonyme après fait beaucoup plus de différence. –

Répondre

4

Si la requête LINQ va être convertie en SQL, la seconde sera plus rapide car elle retournera moins de résultats de la base de données.

La première requête renvoie tous les champs de la ligne de base de données correspondant à l'entité en question. Le second ne retournera que les deux champs qui correspondent à value1 et value2.

+0

Ya c'est ce que je pensais. Je n'étais pas sûr si la rangée entière de table serait retournée, et alors les deux articles ont été récupérés, ou si c'était la manière que vous avez indiquée où seulement les deux articles de la rangée sont récupérés. – Darcy

+0

En plus de cela, à cause du type anonyme, il n'y aura pas de changement de suivi, ce qui économise aussi un peu. – Steven

0

Tout dépend de la taille de l'objet.

Je ne le ferais normalement que si la performance en souffre, et j'ai besoin de faire quelques tables de recherche, etc pour l'optimisation.

Questions connexes