下面是我的程序來衡量ExecuteScalar多次迭代所用的時間。爲什麼ExecuteScalar需要時間進行第一次呼叫?
static void Main(string[] args)
{
string sqlConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True";
SqlConnection connection = new SqlConnection(sqlConnectionString);
for(int i=0; i <4; i++){
Stopwatch stopWatch = new Stopwatch();
string sqlCommand = "Insert into TestTable (SNO, Name) values (" + i + ",' " + i + "')";
SqlCommand command = new SqlCommand(sqlCommand, connection);
connection.Open();
stopWatch.Start();
var result = command.ExecuteScalar();
stopWatch.Stop();
connection.Close();
Console.WriteLine("Time elapsed to insert row " + i + " : " + stopWatch.ElapsedMilliseconds);
}
Console.ReadKey();
}
輸出:
Time elapsed to insert row 0 : 3
Time elapsed to insert row 1 : 1
Time elapsed to insert row 2 : 0
Time elapsed to insert row 3 : 0
我的問題是,爲什麼它走3毫秒的第一次迭代和其餘它比較小。
在此先感謝。
[SQL Server連接池](https://msdn.microsoft.com/en-us/library/8xx3tyca(v = vs.110).aspx) - 第一次有'connection.Open',它真的必須建立一個真正的連接到服務器。在後續運行中,它可能會再次獲取相同的連接。 –
2毫秒的差距真的很重要嗎?也許是因爲連接池? –
除了不太精確的測量方法 - 可能有多種原因會導致這種情況發生。例如,sql連接僅在第一次創建,而其他時間則從連接池中創建。 –