Я создаю инструмент для проверки производительности SQL-запросов. Инструмент должен измерять время возврата результата клиента, как это было бы, если они выполняли запрос и возвращали результаты на консоль. Однако, поскольку этот инструмент будет запускать запрос много раз и, в конечном итоге, через несколько потоков, я не хочу отображать результаты запроса на экране.Время выполнения клиента SQL Server в C#
Я могу получить правильное время, если я покажу результаты на экране, но если перенаправлено на переменную, времена неверны (для быстрого).
Любые идеи?
Ниже приведена часть тестового кода, который у меня есть. Я измеряю разницу времени начала и окончания, чтобы найти количество миллисекунд. Спасибо.
DateTime beginTime = DateTime.Now;
cn2.Open();
try
{
SqlCommand comm = new SqlCommand(cmd, cn2);
SqlDataReader reader = comm.ExecuteReader();
IDictionary d = cn2.RetrieveStatistics();
string[] keys = new string[d.Count];
d.Keys.CopyTo(keys, 0);
for (int x = 0; x < d.Count; x++)
{
Console.WriteLine("{0}\t{1}", keys[x], (long)d[keys[x]]);
}
Int32.TryParse(d["ExecutionTime"].ToString(), out actualTimeMilliseconds);
do
{
int count = reader.FieldCount;
while (reader.Read())
{
for (int i = 0; i < count; i++)
{
Console.WriteLine(reader.GetValue(i));
}
}
} while (reader.NextResult());
}
catch (Exception)
{
throw;
}
cn2.Close();
DateTime endTime = DateTime.Now;
TimeSpan clientTime = endTime.Subtract(beginTime);
Это не совсем понятно, в чем проблема. Почему вы не можете просто написать результаты в файл? Почему «слишком быстро» - проблема? – RBarryYoung
@RBarryYoung Я хочу имитировать пользовательский интерфейс. Я могу уже зафиксировать время, необходимое для совершения вызова, но я хочу также отображать время для отображения, не отображая результаты на экране или в файле. – Russ960
Под «* capture *» вы имеете в виду «* emulate *»? Потому что обычно «* capture *» в производительности означает «измерение и запись», и в идеале это должно быть как можно быстрее, чтобы не мешать измерениям. – RBarryYoung