从命令行重置性能计数器

时间:2012-02-08 15:02:40

标签: command-line performancecounter

我想从命令行执行命令,将给定的性能计数器重置为0.

我可以编写一个简单的“3”行控制台应用程序来做到这一点,但想知道VS或Windows或Windows SDK是否已经附带此类实用程序。我没有在typeperf或logman中找到这样的选项。

上下文: Windows 7 x64(具有管理员访问权限)

背景:
我使用性能计数器来调试/开发/压力测试Web服务。每次命中时,Web服务都会增加性能计数器。

因此,方案是点击Web服务10000次并验证没有消息丢失(我测试MSMQ +无序处理+持久性+ Windows工作流服务)

1 个答案:

答案 0 :(得分: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;
        }
    }
}