我有一个包含大约 16,500 个城市的表的数据库,以及该数据库的 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
,我试过预先生成视图。
我该怎么做才能.Local
更快?(并非所有运行此应用程序的客户端都将在快速 LAN 上。)