晚上闲来无事,突然想测试一下Ado.Net连接池带来的连接速度提升,写了以下代码:
1
using System;
2
using System.Configuration;
3
using System.Data.SqlClient;
4
using System.Diagnostics;
5
6
namespace ConsoleApplication1
7
{
8
class Program
9
{
10
static void Main(string[] args)
11
{
12
string _connString = ConfigurationManager.ConnectionStrings["ConnStr"].ToString();
13
14
SqlConnection conn = new SqlConnection(_connString);
15
16
Stopwatch sw = new Stopwatch();
17
18
sw.Start();
19
conn.Open();
20
sw.Stop();
21
Console.WriteLine("1连接所用时间:{0}" , sw.ElapsedTicks.ToString());
22
23
conn.Close();//关闭连接
24
25
sw.Reset();
26
sw.Start();
27
conn.Open();//现在是直接从连接池中分配的连接,所以速度要快很多
28
sw.Stop();
29
30
Console.WriteLine("2连接所用时间:{0}", sw.ElapsedTicks.ToString());
31
32
conn.Dispose();//释放连接
33
34
conn.ConnectionString = _connString;
35
36
sw.Reset();
37
sw.Start();
38
conn.Open();//Dispose()后,仍然可以连接!(前提是必须重设连接字符串)
39
sw.Stop();
40
Console.WriteLine("3连接所用时间:{0}", sw.ElapsedTicks.ToString());//从输出结果上看,这一次仍然要比首次连接快很多,貌似也是从连接池中取的
41
42
conn.Close();
43
44
45
using (SqlConnection conn2 = new SqlConnection(_connString))
46
{
47
try
48
{
49
sw.Reset();
50
sw.Start();
51
conn2.Open();//即使创建一个完全不同的新Connection对象,只要连接字符串相同,仍然会从连接池内中分配已有连接,所以速度仍然很快
52
sw.Stop();
53
Console.WriteLine("4连接所用时间:{0}", sw.ElapsedTicks.ToString());
54
}
55
catch (Exception)
56
{
57
58
throw;
59
}
60
finally {
61
conn2.Close();
62
}
63
}
64
65
66
67
//连续多次调用Close()或Dispose()不会抛出异常,但连续多次调用Open()会抛出异常
68
//conn.Close();
69
//conn.Close();
70
71
//conn.Dispose();
72
//conn.Dispose();
73
Console.Read();
74
75
//即使不关闭连接,程序退出时,连接也被会自动销毁
76
}
77
}
78
}
using System;2
using System.Configuration;3
using System.Data.SqlClient;4
using System.Diagnostics;5

6
namespace ConsoleApplication17
{8
class Program9
{10
static void Main(string[] args)11
{12
string _connString = ConfigurationManager.ConnectionStrings["ConnStr"].ToString();13

14
SqlConnection conn = new SqlConnection(_connString);15

16
Stopwatch sw = new Stopwatch();17

18
sw.Start();19
conn.Open();20
sw.Stop();21
Console.WriteLine("1连接所用时间:{0}" , sw.ElapsedTicks.ToString());22

23
conn.Close();//关闭连接24

25
sw.Reset();26
sw.Start();27
conn.Open();//现在是直接从连接池中分配的连接,所以速度要快很多28
sw.Stop();29

30
Console.WriteLine("2连接所用时间:{0}", sw.ElapsedTicks.ToString());31

32
conn.Dispose();//释放连接33

34
conn.ConnectionString = _connString;35

36
sw.Reset();37
sw.Start();38
conn.Open();//Dispose()后,仍然可以连接!(前提是必须重设连接字符串)39
sw.Stop();40
Console.WriteLine("3连接所用时间:{0}", sw.ElapsedTicks.ToString());//从输出结果上看,这一次仍然要比首次连接快很多,貌似也是从连接池中取的41

42
conn.Close();43

44

45
using (SqlConnection conn2 = new SqlConnection(_connString))46
{47
try48
{49
sw.Reset();50
sw.Start();51
conn2.Open();//即使创建一个完全不同的新Connection对象,只要连接字符串相同,仍然会从连接池内中分配已有连接,所以速度仍然很快52
sw.Stop();53
Console.WriteLine("4连接所用时间:{0}", sw.ElapsedTicks.ToString());54
}55
catch (Exception)56
{57

58
throw;59
}60
finally {61
conn2.Close();62
}63
}64
65

66
67
//连续多次调用Close()或Dispose()不会抛出异常,但连续多次调用Open()会抛出异常68
//conn.Close();69
//conn.Close();70

71
//conn.Dispose();72
//conn.Dispose();73
Console.Read();74

75
//即使不关闭连接,程序退出时,连接也被会自动销毁76
}77
}78
}本机执行结果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()后,再次连接的速度,有时快,有时慢(但总体比首次连接要快),不知道是不是我机器的问题.

