2012-02-08 95 views
2

我想從命令行執行的命令,以給定的性能計數器復位爲0。復位性能計數器

我可以寫一個簡單的「3」行控制檯應用程序要做到這一點,但想知道如果VS或Windows或Windows SDK已經有了這樣的實用程序。我沒有在typeperf或logman中找到這樣的選項。

語境: 的Windows 7 64位(擁有管理員權限)

背景:
我使用性能計數器來調試/開發/壓力測試的Web服務。每次訪問時,Web服務都會增加一個性能計數器。

所以情況是打web服務10000次,並確認沒有消息已經丟失(我測試MSMQ +亂序處理+執着+ Windows工作流服務)

回答

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; 
     } 
    } 
}