目的

测试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

C# EF框架 频繁连接性能损耗的更多相关文章

  1. C# 的EF框架怎么连接Oracle数据库

    安装odp.net ODP.NET你不需要安装Oracle,不需要配置oracle.key文件,不需要配置TnsNames.Ora文件 不需要配置环境变量:完全的傻瓜式的在没有安装oracle数据库或 ...

  2. 实体框架 (EF) 入门 => 六、性能注意事项

    这个还真是复杂,看了看微软的文档,有些根本就看不懂,有些能看懂,但对我这种菜鸟也不会去用. 无从下手啊,前面放了几个链接,挨个试试吧. 一.显式打开连接 这个我测试过,有些时候,需要我们显示打开连接, ...

  3. Redis高级实践之————Redis短连接性能优化

    摘要: 对于Redis服务,通常我们推荐用户使用长连接来访问Redis,但是由于某些用户在连接池失效的时候还是会建立大量的短连接或者用户由于客户端限制还是只能使用短连接来访问Redis,而原生的Red ...

  4. EF框架的三种工作方式

    EF框架step by step(1)—Database-First EF框架step by step(2)—Model-First EF框架step by step(3)—Code-First 通过 ...

  5. Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询     SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...

  6. EF框架学习手记

    转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...

  7. EF框架之三种模式

    使用EF之前必须要对EF有个宏观的了解.学习任何一种技术都要像门卫一样问几个问题. 第一,它是谁? 第二,从哪里来? 第三,到哪里去? 默念一遍:不谋全局者,不足谋一域. Entity Framewo ...

  8. EF框架step by step(7)—Code First DataAnnotations(1)

    Data annotation特性是在.NET 3.5中引进的,给ASP.NET web应用中的类提供了一种添加验证的方式.Code First允许你使用代码来建立实体框架模型,同时允许用Data a ...

  9. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的连接恢复和命令拦截

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第四篇:MVC程序中实体框架的连接恢复和 ...

随机推荐

  1. 从 SVN 迁移至 Git 并保留所有 commit 记录

    yum install -y git-svn 用户映射文件user.txt,等号左边为svn账号,右边为Git用户名和邮箱.注意:svn中有多少用户就要映射多少 test1=test1<1472 ...

  2. org.springframework.web.method.ControllerAdviceBean#isApplicableToBeanType 作用

    org.springframework.web.method.ControllerAdviceBean#isApplicableToBeanType(@Nullable Class<?> ...

  3. JDBC操作数据库工具类(使用阿里Druid原生API创建数据源)

    1.数据库配置类 package com.zdlt.auth.api.common.druid; import java.util.Properties; import static com.alib ...

  4. js数组、对象处理

    js arry: var arry = []; js object: var obj = {}; obj定义属性: obj.filename=''; obj.id=''; 把 obj 添加到 arry ...

  5. MySQL数据类型:UNSIGNED注意事项(转)

    原文地址:https://www.cnblogs.com/blankqdb/archive/2012/11/03/blank_qdb.html 1. UNSIGNED UNSIGNED属性就是将数字类 ...

  6. ajaxSubmit的data属性

    https://www.cnblogs.com/shiyou00/p/6841801.html js-art-template 修改一处代码的时候发现了让我疑惑的地方.ajaxSubmit的data用 ...

  7. PMP 第12~13章错题总结

    1.合同解释应该遵循几个主要原则: 1)主导语言原则 2)适用法律原则 3)整体解释原则 4)公平诚信原则2.合同收尾包括的工作: 1)产品核实 2)可交付成果验收 3)财务结算 4)退还保证金或担保 ...

  8. Linux 运行命令 提示 bash command not found

    这是系统path路径设置错误的问题,path没有设置对 系统就无法找到命令 1.运行:export PATH=/usr/bin:/usr/sbin:/bin:/sbin (执行完先不要关闭终端,这样保 ...

  9. 测试面试题集锦----liunx与网络

    国庆完后就回深圳了,所以也要参加面试了,我大概收集了一些感觉可能会面试到的一些笔试题,给大家参考,答案不一定全对,分为liunx ,网络,mysql,编程题,我分别按分类补充,以后在继续补充 liun ...

  10. 快速安装Python3+RobotFrameowork自动化测试环境

    1. 安装Python3(笔者这里安装的Python3.6.5) 安装 robotframework :   pip install robotframework -U pip install rob ...