Именование счетчиков производительности мультиэкземпляра в.NET

Большинство несколько счетчиков производительности экземпляра в Windows, кажется, автоматически(?) имеют #n на конце, если существует больше чем один экземпляр с тем же именем.

Например: если в Perfmon Вы смотрите под Process категория, Вы будете видеть:

...
dwm
explorer
explorer#1
...

Я имею два explorer.exe процессы, таким образом, второму счетчику добавили № 1 к его имени.

Когда я пытаюсь сделать это в приложении.NET:

  • Я могу создать категорию и зарегистрировать экземпляр (использующий PerformanceCounterCategory.Create это берет a CounterCreationDataCollection).
  • Я могу открыть счетчик для записи и записать в него.

Когда я открываю счетчик во второй раз, когда (в другом процессе), он открывает тот же счетчик. Это означает, что у меня есть два процесса, бьющиеся за счетчики.

Документация для PerformanceCounter.InstanceName состояния это # не позволяется на имя.

Так: как у меня есть счетчики производительности нескольких-экземпляров, которые являются на самом деле, несколько инстанцируют? И где вторые (и последующий) экземпляры добираются #n добавленный к имени?

Это: Я знаю, что могу поместить идентификатор процесса (например). на имени экземпляра. Это работает, но имеет неудачный побочный эффект, что перезапуск процесса приводит к новому PID, и Perfmon продолжает контролировать старый счетчик.

Обновление:

Я создаю категорию (и счетчик) следующим образом:

const string categoryName = "Test App";
const string counterName = "Number of kittens";
string instanceName =
    Path.GetFileNameWithoutExtension(
        Process.GetCurrentProcess().MainModule.FileName);

if (!PerformanceCounterCategory.Exists(categoryName))
{
    var counterCreationDataCollection = new CounterCreationDataCollection
        {
            new CounterCreationData(counterName, "",
                PerformanceCounterType.NumberOfItems32)
        };

    PerformanceCounterCategory.Create(categoryName, "",
        PerformanceCounterCategoryType.MultiInstance,
        counterCreationDataCollection);
}

Я открываю счетчик следующим образом:

PerformanceCounter counter = new PerformanceCounter(
        categoryName, counterName, instanceName, readOnly: false);

11
задан Roger Lipscombe 7 June 2010 в 16:08
поделиться