有人可以给我一个大概的时间(以毫秒为单位),来说明在从C#到SQL建立新的数据库连接需要多长时间吗?也就是说,当连接池必须创建一个新的连接时,开销是多少。
这要看具体情况:
一些更加偏门的时间:
通常情况下,每秒可以进行10-15次新连接。如果出现问题(例如DNS查找问题,IPsec问题,SSL问题,Kerberos问题),连接时间可能会轻松增加到10-15秒。
相比之下,现有的池化连接只需要执行sp_resetconnection(这是在现有通道上的一次往返),即使必要的话也可以避免执行该操作。
StopWatch timer = new StopWatch();
timer.Start();
for(int i=0;i<100;++i)
{
using(SqlConnection conn = new SqlConnection("SomeConnectionString;Pooling=False;"))
{
test.Open();
}
}
timer.Stop();
Console.WriteLine(test.Elapsed.Milliseconds/100);
这将得到打开和关闭100个连接的平均时间。请注意,我没有运行上述代码。
编辑:根据Richard Szalay的评论禁用了连接池。否则,结果会有所偏差。
这要取决于你连接的数据库是本地的还是跨网络的,还有如果是跨网络的话就要考虑网络速度。如果一切都在本地,可能需要 1 或 2 毫秒(具体时间取决于数据库管理系统)。如果更现实一点,连接到局域网上也可以很快。以下是一个简单的例子,连接到不同子网上的服务器(我想应该只需一次跳转):
for ( int i = 0; i < 5; i++ )
{
Stopwatch timeit = new Stopwatch();
timeit.Start();
AdsConnection conn = new AdsConnection( @"Data Source = \\10.24.36.47:6262\testsys\;" );
conn.Open();
timeit.Stop();
Console.WriteLine( "Milliseconds: " + timeit.ElapsedMilliseconds.ToString() );
//conn.Close();
}
Milliseconds: 99
Milliseconds: 5
Milliseconds: 4
Milliseconds: 4
Milliseconds: 4