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的問題,下次再研究。