Большинство несколько счетчиков производительности экземпляра в 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);