如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