gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:40:25 24 4
gpt4 key购买 nike

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

}

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

最佳答案

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

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

这里真正的关键是 LINQ 查询执行是延迟的 - 这意味着查询实际上不会被执行,直到它被迭代,无论是通过循环,还是调用 ToList() ,或者其他一些方式。即设置变量queryShortWay1queryLongWay1单独不会导致查询执行。

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

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