Почему мои счетчики производительности не изменятся?

У Вас есть несколько опций. Перечисленный в порядке предпочтения:

  1. Использование SortedMap :
    SortedMap myNewMap = new TreeMap(myOldMap);
    Это весьма предпочтительно, если Вы хотите выполнить итерации несколько раз. Это сохраняет ключи отсортированными, таким образом, Вы не должны сортировать их перед итерацией.
  2. нет никакого № 2.
  3. нет никакого № 3, также.
  4. SortedSet keys = new TreeSet(myMap.keySet());
  5. List keys = new ArrayList(myMap.keySet()); Collections.sort(keys);

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

5
задан blowdart 21 September 2009 в 19:11
поделиться

3 ответа

Необходимы дальнейшие действия. Похоже, в любом случае, под Win7 монитор производительности может работать не так, как ожидалось. Когда я написал тестовый код, я приостановил приложение после создания счетчиков, чтобы запустить монитор производительности. Как только я позволил ему продолжить, монитор никогда не менял свои счетчики, несмотря на то, что был изменен базовый счетчик.

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

Итак, код, как все указали, правильный, это был монитор производительности Windows, который плохо себя вел.

Спасибо всем за ответы!

2
ответ дан 15 December 2019 в 06:30
поделиться

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

Если вы изменили имена счетчиков с момента первого создания категории, ваш новый счетчик не будет существовать в категории, и вы можете упустить небольшое различие в названии счетчика при просмотре его в Performance Monitor.

1
ответ дан 15 December 2019 в 06:30
поделиться

Ваш код выглядит хорошо. Единственное отличие от моего рабочего примера в том, что я вызываю метод приращения после установки RawValue.

PerformanceCounter myCounter = 
    new PerformanceCounter(counterCategory, counterName, false);

for (int i = 0; i < 10; i++)
{
    Console.WriteLine("Setting to "+i);
    myCounter.Increment();
    Thread.Sleep(200);
}

myCounter.Close();
0
ответ дан 15 December 2019 в 06:30
поделиться
Другие вопросы по тегам:

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