Получите Имя экземпляра Счетчика производительности (w3wp#XX) из идентификатора рабочего процесса ASP.NET

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

13
задан Grant Holliday 3 December 2012 в 01:57
поделиться

4 ответа

Первый хит на Google:

Несколько счетчиков производительности CLR появляются, которые имеют имена, которые напоминают "W3wp#1"

, Когда несколько рабочих процессов ASP.NET будут работать, счетчики производительности Общеязыковой среды выполнения (CLR) будут иметь имена, которые напоминают "W3wp#1" или "W3sp#2" и так далее. Это было исправлено в Платформе.NET 2.0 для включения счетчика под названием идентификатор Процесса в объекте управления Памяти CLR.NET. Это дисплеи счетчика идентификатор процесса для экземпляра. Можно использовать, это в противоречии с определяет счетчик производительности CLR, который связан с процессом.

Также КБ 281884 :

По умолчанию, Монитор производительности (Perfmon.msc) отображает несколько процессов, которые имеют то же имя путем перечисления процессов следующим образом:

Process#1 Process#2 Process#3

Монитор производительности может также отобразить эти процессы путем добавления идентификатора процесса (PID) к имени следующим образом:

Process_PID

11
ответ дан 1 December 2019 в 21:53
поделиться
private static string GetProcessInstanceName(int pid)
{
  PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");

  string[] instances = cat.GetInstanceNames();
  foreach (string instance in instances)
  {

     using (PerformanceCounter cnt = new PerformanceCounter("Process",  
          "ID Process", instance, true))
     {
        int val = (int) cnt.RawValue;
        if (val == pid)
        {
           return instance;
        }
     }
  }
  throw new Exception("Could not find performance counter " + 
      "instance name for current process. This is truly strange ...");
}
11
ответ дан 1 December 2019 в 21:53
поделиться

Пример от chiru не работает в конкретном случае - когда у вас есть две версии одной и той же программы с одинаковыми именами, а одна - не .net, и вы запускаете версию .net после не -.net версия. Версия .Net будет называться application # 1, но когда вы обращаетесь к счетчикам производительности CLR, используя это имя, имена экземпляров на счетчике имеют имя без # 1, поэтому вы получаете ошибки.

Nick.

1
ответ дан 1 December 2019 в 21:53
поделиться

Even though changing of registry settings look quite easy, unfortunately most of us dont have the rights to do it on the server (or we dont want to touch it!). In that case, there is a small workaround. I have blogged about this here.

1
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: