2009-07-13 17 views

Respuesta

6

Suponiendo que estamos hablando de LinqToObjects (obviamente LinqToSql, LinqToWhatever tienen sus propias reglas), el primero será ligeramente más lento ya que se debe crear un nuevo iterador, pero es increíblemente improbable que alguna vez note la diferencia. En términos de número de comparaciones y número de elementos examinados, el tiempo que los dos tomarán para correr será prácticamente idéntico.

En caso de que usted está preocupado, lo que se no pasar es que el operador .Where filtra la lista de artículos n y la .FirstOfDefault toma el primero de la lista filtrada. Ambas secuencias generarán un cortocircuito correctamente

0

Si suponemos que en ambos casos está utilizando los métodos de Extensión proporcionados por la clase estática Enumerable, entonces será difícil medir cualquier diferencia entre los dos.

la forma más larga ...

myCollection.Where(...).FirstOrDefault() 

... habrá (técnicamente) producir más actividad de la memoria (la creación de un iterador intermediario para manejar la cláusula Where()) e implicar un poco más ciclos de procesamiento.

La cosa es que estos iteradores son perezosos - la cláusula Where() no irá alegremente por toda la lista se evalúa el predicado, sólo se comprobará tantos elementos como sea necesario para encontrar uno para pasar a través.

Cuestiones relacionadas