【问题标题】:AddObject() method very slowAddObject() 方法非常慢
【发布时间】:2012-03-19 20:16:24
【问题描述】:

我有一个奇怪的问题,当我尝试使用 ObjectSet(TEntity).AddObject() 添加一个新实体时,与正常行为相比,它非常慢,大约需要 500 毫秒,而且它只发生在一个场合,我确信需要一些时间的指令是 AddObject 而不是 SaveChanges。

代码很简单

    ObjectEntity obj = businessObj.ExtractEntityObj();
    context.ObjectTable.AddObject(ObjectEntity);

在调用这部分代码之前,我对 ObjectContext 做了一些工作,但它并不比我在所有其他操作中所做的多,这似乎取决于有多少具有相同外键的项目存储在数据库中,我知道这听起来很奇怪,但它是唯一改变同一指令性能的变量。我还注意到,如果我在新的 DataContext 上尝试这样做,性能会恢复正常(几毫秒),但对于架构问题,我每次必须完成某事时都无法拥有新的 DataContext。

有人可以帮我吗? 谢谢

【问题讨论】:

  • 您必须提供更多详细信息。这就像:我有一个特殊情况发生这种情况,但我不会告诉你任何关于这种情况的事情。为什么会这样?
  • 如前所述,如果不了解更多信息,很难说。但即便如此,我也感觉到即将举行性能分析会议,而这是你必须自己做的事情。

标签: entity-framework entity-framework-4 linq-to-entities entity-framework-4.1


【解决方案1】:

修改您的查询

int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID

int id = context.ObjectTable.FirstOrDefault(t=>t.Something = somethingElse).ID

它应该没有任何显着的性能改进,但为什么要使用Where(),然后是FirsOrDefault()

【讨论】:

    【解决方案2】:

    我解决了我的问题,也许对某人有帮助,这是由于我在那个指令之前做了一个简单的查询,这个:

    int id = context.ObjectTable.Where(t=>t.Something = somethingElse).FirstOrDefault().ID
    

    我仍然不知道为什么,但是这条指令将所有“ObjectTable”数据附加到上下文中,使其非常慢,“ObjectTable”也是我在其中添加新实体的同一个表。 将 ObjectQuery MergeOption 设置为 NoTracking 我已解决问题

    再见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      相关资源
      最近更新 更多