Ado.Net连接池的速度测试
时间:2022-04-23
本文章向大家介绍Ado.Net连接池的速度测试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
晚上闲来无事,突然想测试一下Ado.Net连接池带来的连接速度提升,写了以下代码:
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string _connString = ConfigurationManager.ConnectionStrings["ConnStr"].ToString();
SqlConnection conn = new SqlConnection(_connString);
Stopwatch sw = new Stopwatch();
sw.Start();
conn.Open();
sw.Stop();
Console.WriteLine("1连接所用时间:{0}" , sw.ElapsedTicks.ToString());
conn.Close();//关闭连接
sw.Reset();
sw.Start();
conn.Open();//现在是直接从连接池中分配的连接,所以速度要快很多
sw.Stop();
Console.WriteLine("2连接所用时间:{0}", sw.ElapsedTicks.ToString());
conn.Dispose();//释放连接
conn.ConnectionString = _connString;
sw.Reset();
sw.Start();
conn.Open();//Dispose()后,仍然可以连接!(前提是必须重设连接字符串)
sw.Stop();
Console.WriteLine("3连接所用时间:{0}", sw.ElapsedTicks.ToString());//从输出结果上看,这一次仍然要比首次连接快很多,貌似也是从连接池中取的
conn.Close();
using (SqlConnection conn2 = new SqlConnection(_connString))
{
try
{
sw.Reset();
sw.Start();
conn2.Open();//即使创建一个完全不同的新Connection对象,只要连接字符串相同,仍然会从连接池内中分配已有连接,所以速度仍然很快
sw.Stop();
Console.WriteLine("4连接所用时间:{0}", sw.ElapsedTicks.ToString());
}
catch (Exception)
{
throw;
}
finally {
conn2.Close();
}
}
//连续多次调用Close()或Dispose()不会抛出异常,但连续多次调用Open()会抛出异常
//conn.Close();
//conn.Close();
//conn.Dispose();
//conn.Dispose();
Console.Read();
//即使不关闭连接,程序退出时,连接也被会自动销毁
}
}
}
本机执行结果1: -------------------------------- 1连接所用时间:480219 2连接所用时间:130 3连接所用时间:60 4连接所用时间:47 --------------------------------
本机执行结果2: -------------------------------- 1连接所用时间:476064 2连接所用时间:137 3连接所用时间:1411 4连接所用时间:49 --------------------------------
本机执行结果3: -------------------------------- 1连接所用时间:691719 2连接所用时间:132 3连接所用时间:69 4连接所用时间:53 --------------------------------
可以明显看出,连接池技术确实让后来的Connection对象Open时速度提升不少,不过有点出乎意料的是"4连接"始终要比"2连接"快不少?既然都是从连接池内中分配的,应该速度差不多才是!另外Dispose()后,再次连接的速度,有时快,有时慢(但总体比首次连接要快),不知道是不是我机器的问题.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centeros7安装mysql
- 使用Keras构建具有自定义结构和层次图卷积神经网络(GCNN)
- 给大忙人写的单例模式的八种实现方法
- 在Python中使用Torchmoji将文本转换为表情符号
- 我通过三个故事终于学明白了三种工厂模式
- 《设计模式》系列-SOLID设计原则
- (力扣)面试题56 - I. 数组中数字出现的次数
- 玩转 Java8 中的 Stream 之从零认识 Stream
- 聊聊dubbo-go的DubboInvoker
- 剑指Offer 面试题03. 数组中重复的数字
- SDAccel矩阵乘法优化(一)
- 花式玩 Spring Security ,这样的用户定义方式你可能没见过!
- 一文胜千言的DHCP的讲解以及DHCP服务器的配置
- 小知识 词云制作
- 解决 Error starting userland proxy: listen tcp 0.0.0.0:6379: bind: address already in use