我想知道当我在一个对象上多次使用 linq 时这很重要。从性能角度来看,我应该将 First() 的结果存储在变量中还是可以更频繁地调用 First() ?
internal class Program
{
public record Item(string FirstName, string LastName, int Age);
static void Main(string[] args)
{
var items = new List<Item>
{
new Item("John", "Doe", 33),
new Item("Some", "Guy", 59)
};
// A First
Console.WriteLine($"{items.First().FirstName}, {items.First().LastName}, {items.First().Age}");
// B
var item = items.First();
Console.WriteLine($"{item.FirstName}, {item.LastName}, {item.Age}");
}
}
Run Code Online (Sandbox Code Playgroud)
First() 只是一个例子,它可能是关于 Last() 或Where()
这取决于。例如,这取决于...
如果它不在内存中,那么不是 Linq-To-Objects,您将一次又一次地执行查询,因此它会被多次发送到数据库。如果它已经在内存中,则取决于...
如果它是一个“物化”集合并且还IList<T>使用了索引器,那么items[0]这基本上是一个无操作。对于其他集合可能会有更多开销,必须枚举它才能获取第一个或(更糟糕)最后一个。
如果它不是“具体化”(在文档中搜索“延迟执行”,如下所示),例如
var items = someHugeCollection.Where(somecondition);
Run Code Online (Sandbox Code Playgroud)
现在你使用Firstor Last,它必须一次又一次地执行,这可能会很昂贵:
Console.WriteLine(items.First().FirstName, items.First().LastName, items.First().Age);
Run Code Online (Sandbox Code Playgroud)
然后,您应该将集合保存在变量中(追加ToList或ToArray)或结果First或Last(如果两者都需要,请将集合存储在变量中)。
因此,根据经验,如果您多次需要它,请将其保存在变量中。
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |