2012-02-08 1 views
2

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

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

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

фона:
Я использую счетчик производительности для отладки/разработки/стресс-тест веб-службы. Веб-сервис увеличивает счетчик производительности каждый раз, когда он попадает.

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

ответ

4

В то время как я жду лучший ответ, вот полная утилита «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; 
     } 
    } 
}