晚上闲来无事,突然想测试一下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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

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()后,再次连接的速度,有时快,有时慢(但总体比首次连接要快),不知道是不是我机器的问题.