2013-12-04 3 views
0

Я создаю инструмент для проверки производительности 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); 
+0

Это не совсем понятно, в чем проблема. Почему вы не можете просто написать результаты в файл? Почему «слишком быстро» - проблема? – RBarryYoung

+0

@RBarryYoung Я хочу имитировать пользовательский интерфейс. Я могу уже зафиксировать время, необходимое для совершения вызова, но я хочу также отображать время для отображения, не отображая результаты на экране или в файле. – Russ960

+0

Под «* capture *» вы имеете в виду «* emulate *»? Потому что обычно «* capture *» в производительности означает «измерение и запись», и в идеале это должно быть как можно быстрее, чтобы не мешать измерениям. – RBarryYoung

ответ

0

выходные редиректы могут быть проблемой, потому что кто-то должен помнить об этом. В качестве альтернативы откройте файл в консольном приложении и добавьте значения в конце прогона.

// Create a new file 
    using (StreamWriter sw = File.CreateText(fileName)) 
    { 
     sw.WriteLine("New file created: {0}", DateTime.Now.ToString()); 
    } 
Смежные вопросы