Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有比.any()更快的方法找到IEnumerable<;T>;有什么数据吗?_C#_Entity Framework_Linq_Ienumerable - Fatal编程技术网

C# 有没有比.any()更快的方法找到IEnumerable<;T>;有什么数据吗?

C# 有没有比.any()更快的方法找到IEnumerable<;T>;有什么数据吗?,c#,entity-framework,linq,ienumerable,C#,Entity Framework,Linq,Ienumerable,在我的代码上运行探查器时,我显示的总执行时间为20秒,其中14秒(14788.4毫秒)被IEnumerable调用占用。Any()有什么方法可以加快执行速度吗 从中提取的表总共有约484000条记录,因此最好避免将这些记录存入内存 我已尝试将IEnumerable.Any()替换为IEnumerable.Count()>0,并使用IEnumerable.GetEnumerator().MoveNext()进行替换 所有这些都不会对执行时间产生重大变化 IEnumerable<Registr

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

从中提取的表总共有约484000条记录,因此最好避免将这些记录存入内存

我已尝试将IEnumerable.Any()替换为IEnumerable.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结果=[按查询填充](19ms)
[条件](0;(14000ms)
返回结果!=null&&result.GetEnumerator().MoveNext();(14000ms)
返回(结果?.Any()?假);(14000ms)

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

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

我现在真的可以吻你了,这个小小的更改使.Any()的执行时间从14788.4ms变为312.4ms