我需要用“假”数据填充我的数据库,以便对其进行一些压力测试 因此,我编写了一些简单直接的代码来输入数据 它运行7个表,为每个表创建一个对象,并使用以下命令添加它:
System.Data.Entity.Add(TEntity)
如下:
context.MyObject.Add(MyObjInstance);
我保存了几百件物品。
现在这种方法很慢,即使没有提交。 (我的意思是几千个物体的小时数)
是否有更快的方法来添加(大约几千个)对象?
像addAll()
这样的东西,还是其他能加速Add
方法的东西呢?
感谢。
答案 0 :(得分:4)
可能是因为多次调用DetectChanges()
。某些EF函数会自动调用此方法。请参阅here。
如果您在上下文中跟踪了很多实体,那么您可以调用一个实体 这些方法在循环中多次,那么你可能会变得很重要 通过关闭检测变化来改善性能 循环的持续时间
集
context.Configuration.AutoDetectChangesEnabled = false;
执行密集的.Add()
操作并设置:
context.Configuration.AutoDetectChangesEnabled = true;
在致电SaveChanges()
之前。
同时考虑为部分批量操作使用新的上下文,因为上下文跟踪的实体越多,它执行的越差。