First()在linq中花时间

1)如果我不使用First(),则需要 8毫秒

IEnumerable<string> Discriptionlist = (from lib in ProgramsData.Descendants("program")
                         where lib.Attribute("TMSId").Value == TMSIds 
                         select lib.Element("descriptions").Element("desc").Value);

2)使用First(),需要 248毫秒

string Discriptionlist = (from lib in ProgramsData.Descendants("program")
                         where lib.Attribute("TMSId").Value == TMSIds 
                         select lib.Element("descriptions").Element("desc").Value).First();

数据读取使用

using (var sr = new StreamReader(FilePath))
{
    Xdoc = XDocument.Load(sr);
}

任何解决方案或其他方法来减少时间(少于248ms)并以字符串形式获取结果。谢谢。

fszxg 回答:First()在linq中花时间

第一个语句仅创建一个IEnumerable,仅当您开始枚举时才运行实际查询。第二条语句运行枚举,这就是为什么它慢一些的原因。

如果运行以下命令,您将通过相同的语句注意到相同的事物:

string DiscriptionListStr;
foreach(var a in Discriptionlist)
{
  DiscriptionListStr = a;
  break;
}
,

Linq使用一种称为“延迟加载”的“功能”。实际上,这意味着在某些情况下,linq表达式实际上不会做任何事情。当被询问时,它正准备做某事。因此,您需要一个元素,然后它将执行操作以获取当时的下一个元素。

由于您的第一条语句不要求元素,所以甚至不会查询数据库。在第二秒钟中,您要求查询必须运行的第一个元素。

本文链接:https://www.f2er.com/3158347.html

大家都在问