我有一个包含约16500个城市的表的数据库,以及该数据库的EF数据模型(数据库优先)。我用以下代码将它们预加载到内存中:
Db.Cities.Load()
...然后是时候使用它们了,我尝试了以下每个查询:
Dim cities() As String = Db.Cities.Select(Function(c) c.CityName).ToArray
Dim cities() As String = Db.Cities.Local.Select(Function(c) c.CityName).ToArray
第一个查询很快(大约10毫秒),但是第二个查询第一次运行大约需要2.3秒(尽管比第一个查询快)。
这没有任何意义,因为SQL Server Profiler会验证第一个查询是否命中了另一台计算机上的数据库,而第二个则没有!
我尝试关闭
Db.Configuration.AutoDetectChangesEnabled
,并尝试预生成 View 。我怎样做才能使
.Local
更快? (并非所有运行此应用程序的客户端都将位于快速局域网上。)
最佳答案
为什么不简单地从第一个查询中保存字符串列表,然后使用它呢?
List<string> cities = db.Cities.Select( x=>x.CityName).ToList();
由于Select,Local可能会变慢,因为Select可能正在做一些一致性检查。
关于.net - EF 4.3.1和EF 5.0 DbSet.Local比实际的数据库查询要慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12223291/