C # PerformanceCounter запросов / сек не обновляется - PullRequest
0 голосов
/ 09 мая 2018

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

Пока все работает нормально. Но когда я попытался получить счетчик «Requests / Sec» для определенного сайта IIS, я не получил никаких значений, например, что он не обновляется вообще. Но если я включу «Монитор производительности» на моем компьютере с Windows, я вижу, что тот же счетчик работает.

Эта программа имеет права администратора.

Фрагмент моего кода для получения этого счетчика выглядит следующим образом.

 public static int GetRequest()
    {

        var cat = PerformanceCounterCategory.GetCategories().FirstOrDefault(s => s.CategoryName.Contains("ASP.NET Apps v4.0.30319"));
        var catinstances = cat.GetInstanceNames().First(s => s.Contains("_lm_w3svc_3_root").ToUpper()));
        PerformanceCounter cpuCounter = new PerformanceCounter("ASP.NET Apps v4.0.30319", "Requests/Sec", catinstances, true);
        return unchecked((int)cpuCounter.NextValue());
    }

Спасибо за ваше время.

1 Ответ

0 голосов
/ 13 мая 2018

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

Следующий код будет держать счетчик в статическом члене и повторно использовать этот экземпляр при следующем вызове вашего метода:

static PerformanceCounter _requestCounter; // keep instance around
static PerformanceCounter cpuCounter  // property with lazy init
{
   get 
   {
      // initialize if we haven't done so.
      if (_requestCounter == null) {
        var cat = PerformanceCounterCategory.GetCategories().FirstOrDefault(s => s.CategoryName.Contains("ASP.NET Apps v4.0.30319"));
        var catinstances = cat.GetInstanceNames().First(s => s.ToUpper().Contains("_WEB"));
        _requestCounter = new PerformanceCounter("ASP.NET Apps v4.0.30319", "Requests/Sec", catinstances, true);

      }
      return _requestCounter;
   }
}

public static int GetRequest()
{  
    return unchecked((int)cpuCounter.NextValue());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...