有没有比.Any() 来查找 IEnumerable<T> 是否有任何数据?



在我的代码上运行profiler时,我显示的总执行时间为20秒,其中14秒(14,788.4 ms(被呼叫ienumeroble。有什么办法可以加快速度?

从中拉出的表总共有〜484,000个记录,因此最好避免将其放入内存。

我尝试用iEnumerable.any((用iEnumerable.count.count((> 0替换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,您可以确保您执行的操作都涉及在可以执行该操作之前在内存中实现查询结果。

最新更新