我使用了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((。跟踪的实体可能会消耗有限的资源,并可能导致性能问题。