unity que ejemplo c# yield enumerators

c# - que - Concurrencia o rendimiento Beneficios del rendimiento de retorno sobre la devolución de una lista



yield return list c# (1)

En el ejemplo de yield return , el resultado se evalúa en cada llamada de IEnumerable.MoveNext mientras que en el ejemplo de la lista, todos los resultados se evalúan antes de que se devuelva IEnumerable (tenga en cuenta que las propiedades del Text no se pueden evaluar para cada resultado como el almacenamiento en caché y la alineación ocurrir). Por lo tanto, con yield return , debe obtener una pequeña mejora de rendimiento en la primera llamada al enumerador y, luego, potencialmente una pequeña disminución de rendimiento en cada llamada posterior a IEnumerable.MoveNext a IEnumerable.MoveNext que se evalúa la propiedad.

Una de las mejores cosas del yield return es que puede devolver secuencias infinitas, secuencias aleatorias y todo tipo de enumeraciones novedosas que serían extremadamente ineficaces o imposibles de hacer con el modelo de creación de una lista primero.

Para decirlo simplemente, devolver una instancia de List requiere que todos los elementos en la lista se evalúen antes de devolver el IEnumerable , mientras que el uso del yield return permite que cada elemento se calcule según lo requiera el consumidor de IEnumerable .

Me preguntaba si hay concurrencia (ahora o futuro), o beneficio en el rendimiento al usar rendimiento devuelto sobre la devolución de una lista. Vea los siguientes ejemplos

Método de procesamiento

void Page_Load() { foreach(var item in GetPostedItems()) Process(item); }

usando retorno de rendimiento

IEnumerable<string> GetPostedItems() { yield return Item1.Text; yield return Item2.Text; yield return Item3.Text; }

devolviendo una lista

IEnumerable<string> GetPostedItems() { var list = new List<string>(); list.Add(Item1.Text); list.Add(Item2.Text); list.Add(Item3.Text); return list; }