自定义时间段内的性能计数器

Performance counters over custom period of time

我需要能够在特定的自定义时间段内收集一些性能计数器。我对 ServiceModelService 的几个性能计数器特别感兴趣:"Calls" 和 "Failed Calls",尽管我认为这个问题适用于任何一个。

开箱即用,WCF 提供 "Calls" 自服务启动以来的总数和 "Calls per second"; "Failed Calls"、"Failed Calls per second" 也一样。我需要的是能够在自定义时间段内创建它,例如 "Calls per minute" 或 "Calls per hour".

我还没有看到任何开箱即用的方法。我想我可以创建我自己的性能计数器收集器,它将每隔 X 时间进行一次计算;我的应用程序 运行 在 Azure 云服务中,所以我相信这可以在启动任务中安装的单独 exe 中完成,或者在 Web 角色启动时生成的单独线程中完成。

我在我自己的特定问题中表述了这个问题,但我相信这个问题适用于任何场景:如何在特定的自定义时间段内捕获性能计数器。

任何帮助将不胜感激!谢谢!

所以事实证明 "Calls per second" 和 "Failed Calls per second" 性能计数器名称有点误导......它们的默认采样率为 1s,但它们能够在任何采样间隔率下工作你需要。例如,如果你想知道五秒钟内发生的呼叫次数,你可以编写如下代码:

// load performance counter
var numOfCalls = new PerformanceCounter(...);

// read initial value for the period
numOfCalls.NextValue();

// wait desired period
Thread.Sleep(5000);

// read final value, the counter will internally calculate it based on the two samples
numOfCalls.NextValue();

如果您使用的是 perfmon,则只需更改采样率即可;如果您使用的是代码,那么您可以通过间隔 NextValue 调用来自行设置采样率。