我使用了 SQL Server Compact 版本 v4。
当我从实体中获取新信息时,需要 1 秒,但是当我从只有一条记录的表中计数时,需要 4 秒。
我使用了 Entity Framework 和 SQL Server Compact Edition。
配置低的电脑速度这么慢的原因是什么?
var db = new Entities(); // 1 second
db.User.count(); // 4 seconds
我使用了 SQL Server Compact 版本 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())。被跟踪的实体可能会占用有限的资源,并可能导致未来的性能问题。