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()后,再次连接的速度,有时快,有时慢(但总体比首次连接要快),不知道是不是我机器的问题.
- 如何重置Cloudera Manager的admin密码
- 如何在CDH集群安装Anaconda&搭建Python私有源
- 如何使用Python Impyla客户端连接Hive和Impala
- 如何在Windows Server2008搭建DNS服务并配置泛域名解析
- 如何通过CM API优雅的获取元数据库密码
- CM启动报InnoDB engine not found分析
- 如何在Hue中使用Sentry
- 如何在Redhat中配置R环境
- 如何在Redhat中安装R的包及搭建R的私有源
- 什么是sparklyr
- 如何利用Dnsmasq构建小型集群的本地DNS服务器
- Cloudera Labs中的Phoenix
- 如何在CDH中使用Phoenix
- Java 8 时间 API 快速入门
- 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 数组属性和方法
- laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
- laravel 如何实现引入自己的函数或类库
- PHP实现15位身份证号转18位的方法分析
- Yii框架的redis命令使用方法简单示例
- Laravel如何实现自动加载类
- 在Laravel中实现使用AJAX动态刷新部分页面
- laravel 自定义常量的两种方案
- Thinkphp页面跳转设置跳转等待时间的操作
- Laravel 创建可以传递参数 Console服务的例子
- laravel实现查询最后执行的一条sql语句的方法
- 解决laravel groupBy 对查询结果进行分组出现的问题
- laravel批量生成假数据的方法
- 对laravel in 查询的使用方法详解
- PHP使用redis位图bitMap 实现签到功能
- thinkphp5+layui实现的分页样式示例