zoukankan      html  css  js  c++  java
  • 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的问题,下次再研究。

  • 相关阅读:
    Java 中几种常用的线程池
    阿里巴巴java工程师面试经验详情
    设计模式-备忘录模式
    设计模式-职责链模式
    设计模式-中介者模式
    设计模式-解释器模式
    设计模式-观察者模式
    设计模式-迭代器模式
    设计模式-命令模式
    设计模式-模板方法模式
  • 原文地址:https://www.cnblogs.com/kim-meng/p/5795190.html
Copyright © 2011-2022 走看看