.net 好奇在LINQ查询中测试值是否在列表中时性能慢吗
我有一段代码(在VB.NET中,但它应该适用于任何.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() 无论是在我的机器上还是在我们的测试/产品服务器上,这都比以下速
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:表中的记录是