Как вызов SqlCommand.ExecuteReader занимает меньше времени, чем сам пакет SQL, как видно из SQL Profiler?SqlCommand.ExecuteReader длительность меньше, чем SQL Продолжительность пакета профилирования
У меня есть следующий простой код работает в консольном приложении, которое вызывает 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.
Я проверил профайлер, который конкретно сообщает миллисекунды.
Я не использую асинхронную версию SqlCommand.ExecuteReader.
Продолжительность профайлера - это не сумма всех времен от нескольких потоков/ядер от того, что я прочитал и проверил, используя время начала и окончания профайлера.
Идеи оценены.
+1: для проверки Sql Profiler Milli/Micro-second thing. – RBarryYoung
Вы проверили продолжительность самого заявления Sql в Profiler? Это всегда несколько меньше, чем Batch Duration, обычно разница небольшая, но иногда это значимо. – RBarryYoung
Да, я проверил продолжительность инструкции - сумма двух операторов суммируется с ожидаемой продолжительностью партии. – user2139987