EF 添加方式比较
using System; using System.Collections.Generic; using DBAccess.Models; using EntityFramework.BulkInsert.Extensions; namespace LinqDemoTest { class Program { static void Main(string[] args) { using (var db = new HIPContext()) { List<TablebulkCopy> list = new List<TablebulkCopy>(); for (int i = 0; i < 1000; i++) { list.Add(new TablebulkCopy { Name = "Name" + i }); } //Add range 方式插入数据库 DateTime dt1 = DateTime.Now; db.TablebulkCopies.AddRange(list); db.SaveChanges(); DateTime dt2 = DateTime.Now; TimeSpan t = dt2 - dt1; Console.WriteLine("A:Ef Range add :" + t.TotalMilliseconds); //Bulk insert 方式插入 dt1 = DateTime.Now; db.BulkInsert(list); db.SaveChanges(); dt2 = DateTime.Now; t = dt2 - dt1; Console.WriteLine("B:Ef bulk insert :" + t.TotalMilliseconds); //逐个插入,一次提交 dt1 = DateTime.Now; foreach (var item in list) { db.TablebulkCopies.Add(item); } dt2 = DateTime.Now; t = dt2 - dt1; db.SaveChanges(); Console.WriteLine("C:Ef add one by one save changes one time :" + t.TotalMilliseconds); //逐个添加,逐个提交 dt1 = DateTime.Now; foreach (var item in list) { db.TablebulkCopies.Add(item); db.SaveChanges(); } dt2 = DateTime.Now; t = dt2 - dt1; Console.WriteLine("D:Ef add & save changes one by one :" + t.TotalMilliseconds); Console.ReadKey(); } } } }
结果分析:
插入相同数据,bulk insert的方式耗时最短,令我惊讶的是 逐个插入 再提交的方式 耗时居然比 addrange的方式快很多。
当然同等条件下异步提交(SaveChangesAsync),耗时会短点。但这个要考虑到异步操作过程中,假如使用同一个上下文对象的话,就不好控制了。
addrange 和add的问题,下次再研究。