gpt4 book ai didi

c# - 有没有比 .Any() 更快的方法来查找 IEnumerable 是否有任何数据?

转载 作者:太空狗 更新时间:2023-10-30 00:17:49 27 4
gpt4 key购买 nike

在我的代码上运行探查器时,我显示总执行时间为 20 秒,其中 14 秒(14,788.4 毫秒)被对 IEnumerable.Any() 的调用占用,有什么方法可以加快这个速度有没有?

从中提取的表共有约 484,000 条记录,因此最好避免将其放入内存。

我已经尝试用 IEnumerable.Count() > 0 替换 IEnumerable.Any() 并使用 IEnumerable.GetEnumerator().MoveNext()

所有这些都不会显着改变执行时间。

IEnumerable<Registration> result = [Fill by Query] (19ms)
[Conditions] (<0.1ms for all)
[Tried all of the following with no performance impact]
return result != null && result.Any(); (14000ms)
return result != null && result.Count() > 0; (14000ms)
return result != null && result.GetEnumerator().MoveNext(); (14000ms)
return (result?.Any() ?? false); (14000ms)

我希望我能找到将总执行时间减少到合理数量的方法,IEnumerable.Any() 是唯一的瓶颈。

最佳答案

您需要调用Queryable.Any,而不是Enumerable.Any,这样实际的数据库查询可以调整为只查询是否存在任何项。通过将 IQueryable 转换为 IEnumerable,您可以确保在其上执行的操作都涉及在执行该操作之前在内存中具体化查询结果.

关于c# - 有没有比 .Any() 更快的方法来查找 IEnumerable<T> 是否有任何数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56263945/

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