任何人都可以向我提供一个球场时间(以毫秒为单位),表示从C#建立到SQL的新数据库连接需要多长时间。即连接池必须创建新连接时的开销是多少。
答案 0 :(得分:9)
取决于:
更深奥的时间:
通常,您每秒可以执行大约10-15个新连接。如果出现问题(例如,DNS查找问题,发出IPsec,SSL问题,Kerberos问题),每个连接可以轻松达到10-15秒。
相比之下,现有的池化连接只需要执行sp_resetconnection(即现有通道上的一次往返),如果需要,甚至可以避免这种情况。
答案 1 :(得分:3)
您总是可以编写一些代码来打开与服务器的连接并为其计时。
类似的东西:
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的评论禁用连接池。否则,结果将会出现偏差
答案 2 :(得分:1)
这取决于您连接的数据库以及它是本地还是网络,以及网络速度(如果是这样)。如果一切都是本地的,则可能是1或2毫秒(同样取决于DBMS)。如果,更现实地说,它是通过局域网,它仍然可以非常快。这是一个连接到不同子网上的服务器的简单示例(我认为是一跳):
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();
}
以下是它印刷的时间。第一个是加载程序集和各种DLL的成本。后续的只是新连接初始化的衡量标准:
Milliseconds: 99
Milliseconds: 5
Milliseconds: 4
Milliseconds: 4
Milliseconds: 4