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
.net 好奇在LINQ查询中测试值是否在列表中时性能慢吗_.net_Entity Framework_Linq - Fatal编程技术网

.net 好奇在LINQ查询中测试值是否在列表中时性能慢吗

.net 好奇在LINQ查询中测试值是否在列表中时性能慢吗,.net,entity-framework,linq,.net,Entity Framework,Linq,我有一段代码(在VB.NET中,但它应该适用于任何.NET语言)使用LINQ检索一些数据库记录: Dim validIDs = GetValidIDs() //this comes from server memory Dim qry = From r in db.table Where validIDs.Contains(r.ID) Select r Return qry.ToList() 无论是在我的机器上还是在我们的测试/产品服务器上,这都比以下速

我有一段代码(在VB.NET中,但它应该适用于任何.NET语言)使用LINQ检索一些数据库记录:

Dim validIDs = GetValidIDs() //this comes from server memory
Dim qry = From r in db.table
          Where validIDs.Contains(r.ID)
          Select r
Return qry.ToList()
无论是在我的机器上还是在我们的测试/产品服务器上,这都比以下速度慢很多倍:

Dim validIDs = GetValidIDs()
Dim qry = From r in db.table
          Select r
Dim ret = New List()
For Each r in qry
    If Not validIDs.Contains(r.ID) Then Continue For
    ret.Add(r)
Next
Return ret
区别在于,在记录被拉入后,检查记录的ID是否在数据库端与.NET端的有效ID列表中


为什么这里有如此显著的性能差异?我不一定在寻找解决方案,只是对LINQ到底在做什么感兴趣。

好的,看起来这个问题是重复的。我在这里找到了答案:

对于那些感兴趣的人来说,由于GetValidIDs()返回的列表是在LINQ之外生成的,LINQ假设它可能会更改,因此它不会缓存所有可能的内容,从而导致性能降低


如果有人能将这个问题标记为上面链接中的问题的副本,那就太好了。谢谢。

好的,看起来这个问题是重复的。我在这里找到了答案:

对于那些感兴趣的人来说,由于GetValidIDs()返回的列表是在LINQ之外生成的,LINQ假设它可能会更改,因此它不会缓存所有可能的内容,从而导致性能降低


如果有人能将这个问题标记为上面链接中的问题的副本,那就太好了。谢谢。

你能提供一些统计数据吗?例如,表中记录的数量、列表中ID的数量、执行时间等。如果使用
validds,是否有任何差异。是否有(x=>x==r.ID)
而不是
包含
?。你能提供一些关于
GetValidIDs()
的详细信息吗?比如,它是否返回了一个
IQueryable
,或者其他什么,…IvanStoev:表中的记录是什么?您能提供一些统计数据吗?例如,表中记录的数量、列表中ID的数量、执行时间等。如果使用
validds,是否有任何差异。是否有(x=>x==r.ID)
而不是
包含
?。你能提供一些关于
GetValidIDs()
的详细信息吗?比如,它是否返回了一个
IQueryable
,还有其他东西,…IvanStoev:表中的记录是