Caching IEnumerable

public IEnumerable<ModuleData> ListModules()
{
    foreach (XElement m in Source.Descendants("Module"))
    {
        yield return new ModuleData(m.Element("ModuleID").Value);
    }
}

Inicialmente, el código anterior es excelente ya que no es necesario evaluar la colección completa si no es necesaria.

Sin embargo, una vez que todos los módulos se han enumerado una vez, resulta más costoso consultar repetidamente el XDocument cuando no hay cambios.

Entonces, como una mejora de rendimiento:

public IEnumerable<ModuleData> ListModules()
{
    if (Modules == null)
    {
        Modules = new List<ModuleData>();
        foreach (XElement m in Source.Descendants("Module"))
        {
            Modules.Add(new ModuleData(m.Element("ModuleID").Value, 1, 1));
        }
    }
    return Modules;
}

Lo cual es genial si estoy usando la lista completa repetidamente, pero de otra forma no sería tan bueno.

¿Hay un punto intermedio en el que pueda obtener resultados hasta que toda la lista haya sido iterada, luego se almacene en caché y se sirva el caché para las solicitudes posteriores?

Respuestas a la pregunta(6)

Su respuesta a la pregunta