有没有比.Any()更快的方法来查找IEnumerable <T>是否有数据?

Lad*_*y_A 4 c# linq ienumerable entity-framework

在我的代码上运行探查器时,我显示的总执行时间为20秒,对此调用IEnumerable占用了14秒(14,788.4 ms).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)
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*rvy 10

您需要调用Queryable.Any,而不是Enumerable.Any,以便可以将实际的数据库查询调整为仅查询是否存在任何项目。通过将IQueryable变为,IEnumerable您可以确保对它执行的所有操作都涉及在执行该操作之前在内存中具体化查询的结果。