为什么在LINQ中使用多个WHERE谓词比使用多个AND要慢
本文关键字:AND 要慢 谓词 WHERE LINQ 为什么 | 更新日期: 2023-09-27 18:22:30
经常使用LINQ来过滤对象数组
我运行了一个测试表达式,它产生了相同的结果,但由于时间不同,我想知道这种行为的原因。
public long testTimeOperetionWHERE()
{
Object[] list = opCoIn.getList();
System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
int i = 0;
while (i<20000)
{
var result = list.Where(o => o.Id>0)
.Where(o => o.Import>0)
.Where(o => o.OrderConfirm==o.NumberConfirm)
.Where(o => o.IdActiveCustomer>100 );
i++;
}
long e = sw.ElapsedMilliseconds;
return e;
}
时间成本结果总是在90-80 之间变化
在这种情况下,
public long testTimeOperetionAND()
{
Object[] list = opCoIn.getList();
System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
int i = 0;
while (i < 20000)
{
var result = list.Where(o => o.Id > 0
&& o.Import > 0
&& o.OrderConfirm==o.NumberConfirm
&& o.IdActiveCustomer>100);
i++;
}
long e = sw.ElapsedMilliseconds;
return e;
}
时间成本总是小于5
您甚至没有执行这个LINQ查询。你只是在定义它。
例如,如果你使用foreach
、ToList()
或Count()
,你会得到更有意义的结果。
while (i < 20000)
{
var result = list.Where(o => o.Id > 0
&& o.Import > 0
&& o.OrderConfirm==o.NumberConfirm
&& o.IdActiveCustomer>100); // not executed
int justToExecuteIt = result.Count(); // executed here
i++;
}
连续的Where
和连续的&&
之间应该没有太大的差异。
我最近问了一个类似的问题:LINQ:具有多个条件的单个Where和具有单个条件的连续Where之间的差异
您可能还发现这个问题有助于理解LINQ延迟执行的好处:LINQ中延迟执行的优点是什么?