Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las operaciones de consulta y de eje a menudo se implementan para usar la ejecución aplazada. En este artículo se explican los requisitos y las ventajas de la ejecución diferida y algunas consideraciones de implementación.
Ejecución diferida
La ejecución diferida significa que la evaluación de una expresión se retrasa hasta que se requiere realmente su valor realizado . La ejecución diferida puede mejorar considerablemente el rendimiento cuando tiene que manipular colecciones de datos de gran tamaño, especialmente en programas que contienen una serie de consultas o manipulaciones encadenadas. En el mejor de los casos, la ejecución diferida solo permite una única iteración a través de la colección de origen.
Las tecnologías LINQ hacen un uso amplio de la ejecución diferida en los miembros de las clases principales System.Linq y en los métodos de extensión de los distintos espacios de nombres LINQ, como System.Xml.Linq.Extensions.
La ejecución diferida se admite directamente en el lenguaje C# mediante la palabra clave yield (Referencia de C#) (en forma de instrucción yield-return
) cuando se usa dentro de un bloque de iterador. Este iterador debe devolver una colección de tipo IEnumerator o IEnumerator<T> (o un tipo derivado).
Diferencias entre la evaluación diligente y la evaluación diferida
Al escribir un método que implemente una ejecución aplazada, también debe decidir si implementa el método con la evaluación diferida o la evaluación diligente.
- En la evaluación diferida, se procesa un único elemento de la colección de origen durante cada llamada al iterador. Esta es la forma típica en que se implementan los iteradores.
- En la evaluación diligente, la primera llamada al iterador hará que se procese toda la colección. También podría ser necesaria una copia temporal de la colección de origen. Por ejemplo, el OrderBy método tiene que ordenar toda la colección antes de devolver el primer elemento.
La evaluación diferida normalmente produce un mejor rendimiento porque distribuye la sobrecarga de procesamiento uniformemente a lo largo de la evaluación de la colección de datos y minimiza el uso de datos temporales. Por supuesto, para algunas operaciones, no hay ninguna otra opción que materializar los resultados intermedios.
Vea Ejemplo de ejecución diferida para obtener un ejemplo de programación de ejecución diferida en C# y Visual Basic.