Я, должно быть, делаю что-то очень неправильно здесь. Я создаю пользовательский счетчик производительности следующим образом:
string counterCategory = "Test Category";
string counterName = "Test Counter";
if (!PerformanceCounterCategory.Exists(counterCategory))
{
Console.WriteLine("Creating Counters");
CounterCreationDataCollection counterCreationDataCollection =
new CounterCreationDataCollection();
counterCreationDataCollection.Add(
new CounterCreationData(counterName,
"Description",
PerformanceCounterType.NumberOfItems32)
);
PerformanceCounterCategory.Create(counterCategory,
"My category description/Help",
PerformanceCounterCategoryType.SingleInstance,
counterCreationDataCollection);
}
Категория счетчика и счетчик создаются и отображаются в мониторе производительности.
Затем я пытаюсь изменить значение счетчика
PerformanceCounter myCounter =
new PerformanceCounter(counterCategory, counterName, false);
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Setting to "+i);
myCounter.RawValue = i;
Thread.Sleep(200);
}
myCounter.Close();
Однако когда я сижу и наблюдаю за счетчиком в мониторе производительности, ничего не происходит, значение никогда не меняется.
Так что я делаю не так?
Если я добавлю вызов nextValue () или rawValue (), то значение из этого будет возвращено, как я ожидал, но монитор производительности Windows по-прежнему показывает плоскую линию, например
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Setting to "+i);
myCounter.IncrementValue()
Console.WriteLine("Next Value = "+myCounter.RawValue());
Thread.Sleep(200);
}
Редактировать: Я обнаружил, что если я закрою монитор производительности, а затем снова открою его, не удаляя счетчики, вдруг обнаружится, что появилось новое значение. Таким образом, значения устанавливаются и сохраняются, однако системный монитор не видит изменений.