如SQL Profiler中所見,如何調用SqlCommand.ExecuteReader比SQL批處理本身完成所需的時間更少?SqlCommand.ExecuteReader持續時間小於SQL Profiler批處理持續時間
我在其中呼籲SqlCommand.ExecuteReader,一個控制檯應用程序運行以下簡單的代碼,我的時間用秒錶對象:
var swQueryTime = new Stopwatch();
var conn = new SqlConnection("Data Source=.;Initial Catalog=master;Trusted_Connection=True;");
conn.Open();
string sql = string.Format(@"select * from sys.dm_os_memory_clerks; select * from sys.dm_os_performance_counters ");
for (int i = 0; i < 10; i++)
{
var comm = new SqlCommand(sql, conn);
swQueryTime.Restart();
var dr = comm.ExecuteReader();
swQueryTime.Stop();
Console.WriteLine("ElapsedMilliseconds: {0}", swQueryTime.ElapsedMilliseconds);
dr.Close();
comm = null;
}
平均SQL批處理持續時間比什麼報道更長的4倍在.Net方面。
我檢查過的profiler是特別報告毫秒。
我沒有使用SqlCommand.ExecuteReader的異步版本。
事件探查器持續時間不是所有時間跨多個線程/核心的總和,這些是我使用探查器開始和結束時間讀取和驗證的結果。
意見讚賞。
+1:用於檢查Sql Profiler Milli/Micro-second的事情。 – RBarryYoung 2013-03-06 13:24:15
您是否在Profiler中檢查了Sql語句本身的持續時間?它總是比批處理持續時間少一點,通常差別很小,但有時候很重要。 – RBarryYoung 2013-03-06 13:26:16
是的,我已經檢查了報表的持續時間 - 這兩個報表總和爲預計的批處理持續時間。 – user2139987 2013-03-06 13:43:00