我最近将一个使用 LINQ to SQL 和 SQL Server CE 3.5 的应用程序更新为 Entity Framework 4.1 Code First 和 SQL Server CE 4.0,现在它的运行速度明显变慢。我在之前和之后做了一些秒表测试,我的应用程序的大多数主要操作似乎平均运行速度慢了 40% 左右。
除了禁用级联删除之外,我正在使用 EF Code First 的所有默认策略和配置。
当我最初发布这个问题时,我关注的是一个似乎花费特别长的查询,但我后来意识到它只是在第一次运行时特别慢(请参阅下面的评论线程)。
我现在认为我看到的是大多数查询运行速度变慢 - 不是显着变慢,而是慢到足以快速累加,因为应用程序执行的大多数操作都涉及多个查询。
这个应用程序有一个非常小的数据库。 SQL CE (.sdf) 文件只有 458 KB,最大的表只有不到 250 条记录。
下面是 POCO 类的示例:
public class Target
{
public int Id { get; set; }
public int TrialDefinitionId { get; set; }
public int Number { get; set; }
public int X { get; set; }
public int Y { get; set; }
public string Phase { get; set; }
public virtual TrialDefinition TrialDefinition { get; set; }
}
我的所有类都遵循这个基本模式(简单类型+虚拟属性来获取通过外键链接的对象)。我有一个类使用ICollection
获取多对一关系的列表。
最后一点:我使用存储库模式作为中介,并且存储库的每次使用都放在using
堵塞。对于“获取”操作,一旦我从数据库获取了所需的数据,这就会导致实体分离。
有人有任何具体策略来提高我的 EF Code First 应用程序的性能吗?请记住,我还没有机会详细阅读 EF。我主要只是尝试尽可能快速、轻松地从 LINQ to SQL 迁移到 EF。对我来说最有用的答案是更改特定策略或配置或其他设置。