第一次调用SaveChanges()时实体框架18秒

时间:2009-09-21 23:32:35

标签: entity-framework

我有一个非常大的实体框架实现(100多个表/实体)。在进行更新时第一次调用SaveChanges时,我遇到了18秒的等待时间。这对于大型实体框架模型是否常见?我听说将EF模型划分为更小的块是提高性能的一种方法。我想知道这是否是唯一的方法?在这一点上进行分区似乎需要做很多工作。

  1. 我应该对EF模型进行分区吗?
  2. 我应该使用多个数据上下文实例还是仅使用共享静态实例?
  3. 您在EF上遇到缓慢的特性,特别是SaveChanges()会有什么表现?
  4. 谢谢!

3 个答案:

答案 0 :(得分:1)

我在我的一个项目中看到同样的问题。第一次调用SaveChanges需要大约12秒和完整的cpu时间,以下调用不需要。

在我使用预生成视图之前,第一次实体轮询几乎同时进行。现在12秒的第一次轮询延迟消失了,但第一次SaveChanges调用仍然需要很长时间。也许有一种方法可以为SaveChanges预生成一些代码......

[编辑] 我只想提一下,我设法通过改变数据库结构来摆脱第一次保存的延迟。保存花了这么长时间的实体是一个大表,对另一个表有很多外键约束(不要问)。删除外键约束就可以了。 [/编辑]

答案 1 :(得分:0)

不,这不是预期的行为。我们的实体模型和您的实体模型一样大,我们没有看到这一点。在您尝试解决问题之前,您需要对应用程序进行概要分析,以确定问题的实际情况。在不知道您的分析结果是什么的情况下,我无法为您提出解决方案。

答案 2 :(得分:0)

我们在一次操作中保存EF中的大多数数据的地方是几百行遍布ca. 80桌。这有一个次秒的响应时间。

它必须与其他东西有关,需要检查的事项是:

  • 这18秒内是否有使用CPU?通过哪个过程?
  • 可能是网络问题,等待超时?
  • 它与构造函数或jit编译有关吗?