.net - EF 4.3.1和EF 5.0 DbSet.Local比实际的数据库查询要慢

标签 .net vb.net entity-framework entity-framework-5 entity-framework-4.3.1

我有一个包含约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/

相关文章:

.net - 将工作单元和存储库模式与 Entity Framework 结合使用的好处

c# - 如何在多个项目的解决方案中管理图标?

.net - 分发任何软件评估版的最佳方式?

c# - 如何显示/隐藏另一个应用程序的窗口?

vb.net - VB.NET 中的迭代器模式(C# 将使用 yield!)

c# - 如何从在 asp.net 中用 scriptmanager.registerclientscript 编写的 javascript 确认框返回值?

c# - 我可以在 Entity Framework 中尝试/捕获 sql server 触发器错误吗

c# - 实现死锁异常的重试逻辑

.net - RegularExpressionValidator.ValidationExpression 强制长度为 10 或 12 个符号

c# - 在 EntityFramework 中使用Where()会导致System.ArgumentException