Сброс счетчика производительности из командной строки - PullRequest
2 голосов
/ 08 февраля 2012

Я хочу выполнить команду из командной строки для сброса заданного счетчика производительности на 0.

Я мог бы написать для этого простое консольное приложение из 3 строк, но мне бы хотелось знать, поставляется ли VS, Windows или Windows SDK с такой утилитой. Я не нашел такой опции ни в typeperf, ни в logman.

Контекст: Windows 7 x64 (с правами администратора)

Справка:
Я использую счетчик производительности для отладки / разработки / стресс-тестирования веб-сервиса. Веб-сервис увеличивает счетчик производительности при каждом обращении к нему.

Таким образом, сценарий состоит в том, чтобы запустить веб-службу 10000 раз и убедиться, что ни одно сообщение не было потеряно (я тестирую MSMQ + обработка вне очереди + постоянство + служба рабочего процесса Windows)

1 Ответ

4 голосов
/ 08 февраля 2012

Пока я жду лучшего ответа, вот полная утилита "rstpc.exe" для сброса счетчика производительности (типа NumberOfItems32):

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;

namespace ResetPerformanceCounter
{
    internal class Program
    {
        private static int Main(string[] args)
        {
            if (args.Length != 2)
            {
                string fileName = Path.GetFileName(Assembly.GetExecutingAssembly().Location);
                Console.WriteLine("Usage: {0} <PC Category> <PC Name>", fileName);
                Console.WriteLine("Examlpe: {0} {1} {2}", fileName, "GEF", "CommandCount");
                return -1;
            }

            string cat = args[0];
            string name = args[1];

            if (!PerformanceCounterCategory.CounterExists(name, cat))
            {
                Console.WriteLine("Performance Counter {0}\\{1} not found.", cat, name);
                return - 2;
            }

            var pc = new System.Diagnostics.PerformanceCounter(cat, name, false);

            if (pc.CounterType != PerformanceCounterType.NumberOfItems32)
            {
                Console.WriteLine("Performance counter is of type {0}. Only '{1}' countres are supported.", pc.CounterType.ToString(), PerformanceCounterType.NumberOfItems32);
                return -3;
            }

            Console.WriteLine("Old value: {0}", pc.RawValue);
            pc.RawValue = 0;
            Console.WriteLine("New value: {0}", pc.RawValue);
            Console.WriteLine("Done.");
            return 0;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...