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

原文地址:https://www.cnblogs.com/kim-meng/p/5795190.html