gpt4 book ai didi

c# - 与 Cast 相比,为什么 .ToList() 是一个瓶颈?示例代码如下

转载 作者:行者123 更新时间:2023-12-02 04:42:29 25 4
gpt4 key购买 nike

http://codepaste.net/4xzv9k是显示 C# 代码的代码粘贴链接(抱歉,我无法在此处查看代码)

我的问题是为什么像下面这样的简单查询比强制转换比 .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

}

您可能会认为 .ToList 并没有慢多少,但至少慢了一个数量级。有什么原因吗?

最佳答案

我想第一个很快,因为它只是设置 mySecondProductLstnullqueryShortWay1不是 List<Product> (它很可能是 IQueryable<Product>IEnumerable<Product> 类型)。此处不执行查询。

第二个“慢”示例实际上是在执行您的查询。

这里真正的关键是 LINQ 查询执行是延迟的 - 这意味着查询在迭代之前不会真正执行,无论是通过循环还是调用 ToList() ,或其他一些手段。即设置变量queryShortWay1queryLongWay1单独不会导致查询执行。

关于c# - 与 Cast 相比,为什么 .ToList() 是一个瓶颈?示例代码如下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20533276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com