Caching IEnumerable

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

Anfänglich ist der obige Code großartig, da nicht die gesamte Sammlung ausgewertet werden muss, wenn sie nicht benötigt wird.

Sobald jedoch alle Module einmal aufgelistet wurden, wird es teurer, das XDocument wiederholt abzufragen, wenn keine Änderung vorliegt.

Also, als eine Leistungsverbesserung:

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

Das ist großartig, wenn ich immer wieder die gesamte Liste verwende, aber sonst nicht so großartig.

Gibt es einen Mittelweg, auf dem ich Rendite erzielen kann, bis die gesamte Liste iteriert wurde, sie dann zwischenspeichern und den Cache für nachfolgende Anforderungen bereitstellen kann?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage