如何提高Entity Framework 4.0大型模型的启动性能?

时间:2011-07-19 20:57:32

标签: performance optimization entity-framework-4

在EDMX实体模型中包含大约350个实体的项目中,我的团队在第一次查询发生时和第一次保存发生时经历了长时间的等待。

在分析运行一些查询并保存的简单案例时,一组简单的步骤只是为了触发查询并保存需要几分钟。

第一个查询占用总时间的47%,只调用执行查询的框架方法。

第一次保存占用了System.Data.Objects.ObjectContext.SaveChanges中总时间的50%。

是否有任何改善性能的好选择 - 这可能会耗费开发时间。

(一旦系统投入生产,它在启动时很烦人,但在持续执行期间不会出现问题)

2 个答案:

答案 0 :(得分:6)

首次使用上下文时,它会生成元数据中定义的映射模型。选项是pregenerate this model并在应用程序中包含预生成的文件(但每次修改EDMX时都必须重新生成)。

这么大的模型应该可能分为多个较小的模型。我几乎不相信350个实体形成了无法分割的单一领域。

答案 1 :(得分:1)

单个大型EDMX将导致大型ObjectContext。每次执行using(var ctx = new YourObjectContext())时,它都会构造一个大对象,初始化很多集合(可能是350个集合),这将使您的数据库操作CPU密集。当您获得大量流量时,您肯定会遇到性能挑战。

我建议将大型WDMX分解为更小的EDMX并生成不同的ObjectContexts。您应该将少量逻辑分组的实体放入一个ObjectContext。