如何从 SQL Server Compact C# 更快地读取实体框架中的数据



我使用了SQL Server Compact edition v4。

当我从实体获取新内容时,需要 1 秒,但是当我从只有一条记录的表中计数时,需要 4 秒。

我使用了Entity Framework和SQL Server Compact Edition。

在配置较低的计算机上速度缓慢的原因是什么?

var db = new Entities();    // 1 second
db.User.count();            // 4 seconds

打开连接可能会很慢,因此可能的解决方案是在应用启动时打开连接一次,并在应用的生存期内保持该连接处于打开状态。

针对 DbContext的第一个实例执行的第一个查询将触发 DbContext 的静态设置。这是解析所有映射的位置,以便 DbContext 已准备好与 DbSet 和关联的实体一起使用。上下文必须处理的实体定义越多,花费的时间就越长。

对于移动应用程序,我认为 EF 将代表数据访问的潜在过高成本,但是从一般 EF 经验来看,为了避免在用户启动其第一个实际查询时出现这种影响,您可以在应用程序启动时实现"预热":

using (var context = new Entities())
{
bool result = context.Users.Any();
}

这可确保设置静态上下文定义,并且上下文的所有后续实例都可以立即执行。请注意,此成本仅在 DbContext 的第一个实例上,对于其他 DbContext 实例,您没有此成本。这些实例应该是短暂的,并受 using 块的限制,以确保它们被释放。对于移动应用程序,您可能需要考虑一个寿命更长的 DbContext,但我会对获取跟踪的实体持谨慎态度(相反,在加载您未编辑的实体时使用 AsNoTracking((。跟踪的实体可能会消耗有限的资源,并可能导致性能问题。

最新更新