http://codepaste.net/4xzv9k 是显示C#代码的codepaste链接(很抱歉,我无法让代码看到这里)
我的问题是为什么像下面这样的简单查询比强制转换而不是.ToList扩展要快得多:
//fast:
for (int i = 0; i < iterations; i++)
{
var queryShortWay1 = productList.OrderBy(a => a.ProductName).Where(a =>
a.ProductName.Length < 99);
mySecondProductLst = queryShortWay1 as List<Product>; //fast CAST
}
//slow:
for (int i = 0; i < iterations; i++)
{
var queryLongWay1 = productList.OrderBy(a => a.ProductName).Where(a =>
a.ProductName.Length < 99);
MyProductList = queryLongWay1.ToList(); //slow
}
Run Code Online (Sandbox Code Playgroud)
你会认为.ToList并不是那么慢,但它至少要一个数量级.有什么原因?
我想第一个是快速的,因为它只是设置mySecondProductLst为null因为queryShortWay1不是List<Product>(它很可能是类型IQueryable<Product>或IEnumerable<Product>).此处不执行查询.
第二个"慢"示例实际上是执行您的查询.
这里真正的关键是LINQ查询执行是延迟的 - 这意味着查询在迭代之前不会被实际执行,无论是通过循环,调用ToList()还是其他方式.也就是说,设置变量queryShortWay1,并queryLongWay1不能单独导致查询执行.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |