gpt4 book ai didi

c# - 缓存 IEnumerable

转载 作者:IT王子 更新时间:2023-10-29 04:43:44 26 4
gpt4 key购买 nike

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

最初上面的代码很棒,因为如果不需要,则无需评估整个集合。

但是,一旦所有 Module 都被枚举一次,在没有变化的情况下重复查询 XDocument 会变得更加昂贵。

因此,作为性能改进:

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

如果我重复使用整个列表,这很好,否则就不是那么好。

是否有一个中间地带,我可以在迭代整个列表之前产生返回,然后缓存它并将缓存提供给后续请求?

最佳答案

可以看看Saving the State of Enumerators其中描述了如何创建惰性列表(缓存一次迭代的项目)。

关于c# - 缓存 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1537043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com