dan*_*004 -2 .net c# linq visual-studio
经常使用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;
}
Run Code Online (Sandbox Code Playgroud)
时间成本结果总是在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;
}
Run Code Online (Sandbox Code Playgroud)
时间成本总是小于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++;
}
Run Code Online (Sandbox Code Playgroud)
连续Wheres和连续之间应该没有很大的区别&&.
我最近问了一个类似的问题:LINQ:单个Where和多个条件之间的区别和单个条件的连续Wheres
您可能还会发现这个问题对于理解LINQ延迟执行的好处很有用:在LINQ中延迟执行有什么好处?
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |