2015-05-06 6 views
0

Моя цель - разработать инструмент для мини-тестов, чтобы я мог проверить производительность веб-Api.Как программно создавать счетчики производительности, чтобы сравнить производительность веб-api

Я хочу программно создать счетчики производительности с помощью простого консольного приложения. В рамках моих исследований я создал основной метод ниже. Это просто простой тест. Поэтому в основном мне нужен HttpClient, чтобы перенаправить x-число запросов, а затем просмотреть некоторые показатели (например, время процессора) для этой операции.

Является ли моя логика правильной?

Скрыть Скопировать код

static void Main(string[] args) 
    { 
      var client = new HttpClient(); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     var theCPUCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName); 

     Console.WriteLine(theCPUCounter.NextValue()); 
     System.Threading.Thread.Sleep(1000); 

     for (int i = 0; i <= 5; i++) 
     { 
      HttpResponseMessage response = client.GetAsync("http://www.google.co.uk/").Result; 
     } 
     Console.WriteLine(theCPUCounter.NextValue()); 
    } 

Я знаю, что есть счетчики производительности, которые делают больше смысла, но на некоторое время, я просто хочу, чтобы увидеть, если я правильно понимаю.

Если выше правильно, то мой план:

1) Создание различных сценариев пропускной способности с одновременных запросов с использованием HttpClient и TPL (т.е. отправить 1000 одновременных запросов, но создавать различные сценарии для каждых 100 для того, чтобы использовать различные ресурсов в Web Api). Как только у меня будут выполнены эти сценарии,

2) Я буду выпускать счетчики производительности для измерения процессора и памяти.

Это план.

Не могли бы вы посоветуете?

Спасибо!

ответ

1

Основной вопрос здесь: «Как использовать PerformancCounters», и вы получили эту часть правильно. Вы можете упростить код:

public static void Main() 
{ 
    var cpuSample = new System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", "_Total"); 
    while(true) 
    { 
     Thread.Sleep(1000); 
     Console.WriteLine(cpuSample.NextValue() + " %"); 
    } 
} 

Ваш пост добавляет в смесь HttpClient, но это полностью ортогональны. Вы используете PerformanceCounters, периодически просматривая образец, а значение считается значением счетчика в интервале от предыдущего образца.

Для конкретного счетчика в вашем примере (общий процент CPU%) действительно не имеет значения, что вы делаете в своем приложении между образцами (т. Е. 10 запросов HttpClient). _Total CPU% - глобальное значение, оно охватывает все приложения и службы на этом хосте.

Если вы заинтересованы в улучшении ваших HTTP-запросов, имейте в виду, что вам следует сосредоточиться где-то еще. Читайте Adjusting HttpWebRequest Connection Timeout in C# и, возможно, High performance TCP server in C#

+0

Спасибо за ответ. –

+0

Спасибо за ответ. Тем не менее, мне нужно измерить производительность существующего веб-Api (например, супер-мини-бенчмаркинг), поэтому мне нужно будет использовать счетчики производительности (программно). Я понимаю, что то, что я делал, относится к полному CPU%, но что делать, если я делаю это только для текущего процесса? Мне нужно будет получить показатели для процессора и памяти.Поэтому мне нужен HttpClient, так как мне нужно забить сервер с числом запросов x, а затем использовать счетчики для получения показателей. Я не заинтересован в улучшении запросов Http. Я хочу определить потенциальные узкие места для номера проактивности –

0

Try библиотека metrics.net:

https://github.com/Recognos/Metrics.NET

Вы можете измерить загрузку процессора (и другие показатели), как это:

using Metrics; 

Metric.Config 
    .WithHttpEndpoint("http://localhost:1234/") 
    .WithAllCounters();