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;
}