【发布时间】:2012-08-26 17:46:32
【问题描述】:
我有一个包含大约 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。)
【问题讨论】:
-
我应该注意我使用的是 .NET 4.0 而不是 4.5,因此对“EF 5.0”的测试实际上是在 EF 5.0(又名 EF 4.4.0)的 .NET 4.0 版本上进行的。不幸的是,.NET 4.5 目前不适合这个项目。
标签: .net vb.net entity-framework entity-framework-5 entity-framework-4.3.1