lunes, 3 de agosto de 2009

Ejecución Diferida y Ejecución Inmediata (LINQ)

Esta es una de las bases de LINQ. ¿Pero qué significa ejecución diferida?
Significa que al ejecutar una consulta LINQ, la totalidad de los resultados no se cargan en memoria, en su lugar los resultados se van cargando a medida que se evalúa la consulta. Esta es la ventaja principal, porque hace que ahorremos recursos.
Por ejemplo, supongamos que tenemos una consulta que nos devuelve mil elementos, si sólo nos interesa el primer elemento y queremos descartar los demás, esos 999 elementos no se cargarán en memoria.
Otra de las ventajas de la ejecución diferida es que nos permite reutilizar la consulta cuando queramos y las veces que lo necesitemos.

Por otro lado tenemos la ejecución inmediata. ¿Qué significa?
A veces por la naturaleza de nuestro programa necesitaremos que la consulta se ejecute completamente, antes de que se procesen los resultados (cómo ejemplo de ejecución inmediata tenéis el post que escribí el otro día Cargar RSS en un Datagridview, la última línea de código dgvRSS.DataSource = feeds.ToList();).
El método de extensión ToList() es lo que fuerza la ejecución inmediata.

Ejemplo de los dos casos:

No hay comentarios: