与 SQL Profiler 中看到的 SQL 批处理本身相比,对 SqlCommand.ExecuteReader 的调用如何花费更少的时间来完成?
我在调用 SqlCommand.ExecuteReader 的控制台应用程序中运行以下简单代码,我使用 Stopwatch 对象计时:
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 批处理持续时间比 .Net 端报告的持续时间长 4 倍。
我检查了探查器是专门报告毫秒。
我没有使用 SqlCommand.ExecuteReader 的异步版本。
探查器持续时间不是我使用探查器开始和结束时间读取和验证的跨多个线程/内核的所有时间的总和。
想法赞赏。