gpt4 book ai didi

c# - C# Visual Studio 2017 ver 15.1.1 中的 Linq 查询中的字符串 Text.ToUpper() 速度较慢

转载 作者:行者123 更新时间:2023-11-30 23:02:36 25 4
gpt4 key购买 nike

我有以下代码需要 5-8 秒才能完成:

recent_items returnedData = (from d in db.recent_items
where d.item_number == scannerInput.Text.ToUpper()
select d).FirstOrDefault();

以下代码在不到半秒内执行:

string search = scannerInput.Text.ToUpper();

recent_items returnedData = (from d in db.recent_items
where d.item_number == search
select d).FirstOrDefault();

这到底是怎么回事?

最佳答案

造成差异的最可能原因是 EF 在从 RDBMS 检索所有行后评估内存中的第一个条件。

Microsoft 文档说明了以下关于 Client vs. Server Evaluation 的内容:

Entity Framework Core supports parts of the query being evaluated on the client and parts of it being pushed to the database. It is up to the database provider to determine which parts of the query will be evaluated in the database.

您的 EF DB 提供程序无法将 scannerInput.Text.ToUpper() 发送到 RDBMS 进行评估,因此它在从数据库中检索数据行后在内存中进行了所有比较。这个决定是正确的,因为 EF DB 提供程序不能假定对上述表达式的连续计算会产生相同的结果。

另一方面,第二个查询使用捕获的变量进行查询。当 EF 运行查询时,该变量的值保证保持不变,因此它继续在 RDBMS 端评估请求。

关于c# - C# Visual Studio 2017 ver 15.1.1 中的 Linq 查询中的字符串 Text.ToUpper() 速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50393776/

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