今天做了一个ef 100万条数据的插入 ,居然发现 插到3000条左右的时候 居然要0.7秒才能插入一条数据 ,这也太坑了把 ,是我写法有问题吗 ,而同样的用ado.net 插入一条 耗时 0.004秒,并且不会出现因为插入的条数越多 时间变长的,
ef开始几百条以前很快 ,随着条数递增会耗时越来越长 ,这是怎么回事 ?是我的代码有问题嘛?我用的ef的datafirst
1 using (NPU_TemporaryEntities db = new NPU_TemporaryEntities()) 2 { 3 4 for (int i = 0; i < 1000000; i++) 5 { 6 Temp temp = new Temp(); 7 DateTime starTime = DateTime.Now; 8 db.Bibliography.Add(temp.Bibliographies); 9 db.SaveChanges(); 10 DateTime endTime = DateTime.Now; 11 Console.Write("正在执行第 " + i + " 条数据插入,耗时 " + (starTime - endTime) + "\r\n"); 12 } 13 }
for (int i = 0; i < 1000000; i++) { Temp temp = new Temp(); DateTime starTime = DateTime.Now; db.Insert(temp.Bibliographies); DateTime endTime = DateTime.Now; Console.Write("正在执行第 " + i + " 条数据插入,耗时 " + (starTime - endTime) + "\r\n"); }
就是这样,没问题.
生成的同一条语句呀 怎么会越来越慢 为什么呢?他做了其他什么操作
@keeppuching: 你读下 SaveChanges 的源码就知道了。
关于性能问题,就象有人希望汽车,要象美国车一样又安全又耐操....然后还省油。
找个女朋友,出门象千颂依,在家象大长今,花钱堪称环保。
为什么不想想亚里士多德的逻辑学呢?
这是没法测试出ef的性能,一条一条的插入数据,就是ado.net纯sql插入,也是比较慢的
把 savechange方法 提到 for 外面 ,每次新增的实例,只修改在上下文中的状态为 added,类似于批量插入。可以试试 差距
每1000条数据SaveChanges一次
参考:http://stackoverflow.com/questions/5940225/fastest-way-of-inserting-in-entity-framework