zoukankan      html  css  js  c++  java
  • C# EF框架 频繁连接性能损耗

    目的

    测试EF框架在一次连接中多次保存和多次连接的耗时对比

    测试环境

    • 数据库SqlServer 2012 R2
    • EF框架6.2.0版本

    数据库内容

    ID UserName Password CreateTime
    1 111 123 2019-07-17 12:12:12
    2 222 123 2019-07-17 12:12:12

    代码

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace EFConnectTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                for(int i=1; i<=10; i++)
                {
                    var task1 = Task.Factory.StartNew<long>(Connect1);
                    task1.Wait();
                    Console.WriteLine(string.Format("第{0}次测试,连接一次的情况下耗时{1}ms", i, task1.Result));
    
                    var task2 = Task.Factory.StartNew<long>(Connect2);
                    task2.Wait();
                    Console.WriteLine(string.Format("第{0}次测试,连接多次的情况下耗时{1}ms", i, task2.Result));
    
                    Console.WriteLine(string.Format("平均每次连接多耗时{0}ms{1}", (double)(task2.Result - task1.Result) / Count, Environment.NewLine));
                }
                Console.ReadLine();
            }
    
            /// <summary>
            /// 执行次数
            /// </summary>
            private static int Count = 1000;
    
            public static long Connect1()
            {
                Stopwatch sw = new Stopwatch();
                sw.Restart();
    
                using (TestEntities dbContext = new TestEntities())
                {
                    var i = 0;
                    while (i < Count)
                    {
                        var userList = dbContext.User.ToList();
                        foreach (var user in userList)
                        {
                            user.UserName = i.ToString();
                        }
                        i++;
                        dbContext.SaveChanges();
                    }
                }
                sw.Stop();
                return sw.ElapsedMilliseconds;
            }
    
            public static long Connect2()
            {
                Stopwatch sw = new Stopwatch();
                sw.Restart();
    
                var i = 0;
                while (i < 1000)
                {
                    using (TestEntities dbContext = new TestEntities())
                    {
                        var userList = dbContext.User.ToList();
                        foreach (var user in userList)
                        {
                            user.UserName = i.ToString();
                        }
                        i++;
                        dbContext.SaveChanges();
                    }
                }
                sw.Stop();
                return sw.ElapsedMilliseconds;
            }
        }
    }
    
    

    测试结果

    第1次测试,连接一次的情况下耗时7150ms
    第1次测试,连接多次的情况下耗时4912ms
    平均每次连接多耗时-2.238ms

    第2次测试,连接一次的情况下耗时4518ms
    第2次测试,连接多次的情况下耗时5217ms
    平均每次连接多耗时0.699ms

    第3次测试,连接一次的情况下耗时4548ms
    第3次测试,连接多次的情况下耗时5719ms
    平均每次连接多耗时1.171ms

    第4次测试,连接一次的情况下耗时4137ms
    第4次测试,连接多次的情况下耗时5456ms
    平均每次连接多耗时1.319ms

    第5次测试,连接一次的情况下耗时4136ms
    第5次测试,连接多次的情况下耗时5771ms
    平均每次连接多耗时1.635ms

    第6次测试,连接一次的情况下耗时4237ms
    第6次测试,连接多次的情况下耗时5570ms
    平均每次连接多耗时1.333ms

    第7次测试,连接一次的情况下耗时4233ms
    第7次测试,连接多次的情况下耗时5109ms
    平均每次连接多耗时0.876ms

    第8次测试,连接一次的情况下耗时4746ms
    第8次测试,连接多次的情况下耗时5132ms
    平均每次连接多耗时0.386ms

    第9次测试,连接一次的情况下耗时4797ms
    第9次测试,连接多次的情况下耗时5033ms
    平均每次连接多耗时0.236ms

    第10次测试,连接一次的情况下耗时4342ms
    第10次测试,连接多次的情况下耗时5209ms
    平均每次连接多耗时0.867ms

    结果分析

    第一次测试由于首次连接数据库结果不准,使用其他9组测试数据进行耗时分析

    每次连接的多耗时0.937ms

  • 相关阅读:
    JAVA错误:Unable to find config file. Creating new servlet engine config file: /WEBINF/serverconfig.wsdd
    java axis发布web service(二) 发布web service
    JAVA错误:AXIS Web Service Problem: No compiler found in your classpath! (you may need to add ‘tools.jar’)
    JAVA错误:java.lang.UnsupportedClassVersionError: Bad version number in .class file
    JavaScript中的div和filter错误
    拉格朗日乘数法
    Timeout Detection & Recovery (TDR)
    游戏程序员关心的Autodesk Maya 2013相关操作
    Eclipse开发Android程序如何在手机上运行
    我的第一篇随笔
  • 原文地址:https://www.cnblogs.com/niecx/p/11198517.html
Copyright © 2011-2022 走看看