目的

测试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. android7/8新特性 画中画、shortcut和分屏模式

    多窗口 在android7.0中原生提供了多窗口模式和画中画模式,多窗口模式将屏幕分为上下或左右两块区域分别显示两个应用,画中画模式主要应用在android TV中,类似于windows中的多窗口. ...

  2. Java学习-053-JSON工具类演示

    日常开发工作,经常遇到使用JSON数据,好久没有写了,今晚抽了三个小时时间写了个JSON工具类,主要包含如下几个方法: 获取JSON字符串所有键路径列表: 获取JSON字符串所有键值列表: JSON数 ...

  3. MacOSX 虚拟机与宿主机的网络配置

    环境:MacOSX.VMware Fusion11.5.CentOS6 比较重要的两个网卡 安装虚拟机后,宿主机会多出几个网卡,其中vmnet1对应的Bridge(桥接方式),vmnet8对应NAT方 ...

  4. postman 用环境变量Environment实现多服务器版本

    现存问题 在测试API期间,往往存在多种环境,对应IP地址(或域名也不同) 比如: Prod: http://116.62.25.57/ucows 用于开发完成发布到生产环境 Dev: http:// ...

  5. https本地自签名证书添加到信任证书访问

    1.背景 本文适用于基于https(http+ssl)的网站通信.本地调试等,上线是请寻找免费 ssl证书申请. 本地调试过程中,一些特殊的场景需要我使用http+ssl通信,比如在Chrome中使用 ...

  6. ETF:pcf文件制作

    pcf文件依赖数据: ETF基本信息() 指数权重文件(次日权重文件,中证指数公司) 现金替代标志文件(根据中证指数的停复牌文件) 净值文件(基金公司估值系统计算) 成分股数量计算公式: 1.估值系统 ...

  7. FLINK-11738

    caused by: akka.pattern.asktimeoutexception: ask timed out on flink Caused by: akka.pattern.AskTimeo ...

  8. Unable to create application 异常

      这个错误是空指针,但你怎么去找就是找不到为什么会空指针 这时,你要去检查Application 中是否有重写的方法例如这个 @Override protected void attachBaseC ...

  9. iperf—流量测试

    iperf是另外一款用于流量测试的软件,主要运行于Windows系统和安卓系统的手机/PAD(IOS系统下载需要收费). 一个工作在Server模式,另外一个工作在Client模式,输入Server的 ...

  10. 1.2 lvm镜像卷

    镜像能够分配物理分区的多个副本,从而提高数据的可用性.当某个磁盘发生故障并且其物理分区变为不可用时,您仍然可以访问可用磁盘上的镜像数据.LVM 在逻辑卷内执行镜像.  系统版本: # cat /etc ...