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

时间:2015-08-18 10:46:49

标签: c# performance wcf performancecounter azure-cloud-services

我需要能够在特定的自定义时间段内收集一些性能计数器。我对ServiceModelService的几个perf计数器特别感兴趣:" Calls"和#34;失败的电话",虽然问题适用于我认为的任何人。

开箱即用,WCF提供"通话"自服务开始以来的总数和"每秒呼叫&#34 ;;同样适用于"呼叫失败","每秒呼叫失败"。我需要的是能够在一个自定义的时间段内创建它,例如"每分钟呼叫"或"每小时拨打电话"。

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

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

任何帮助都将非常感谢!谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明"每秒呼叫"和"每秒呼叫失败"性能计数器名称有点误导......它们的默认采样率为1秒,但它们能够满足您所需的任何采样间隔速率。例如,如果您想知道在五秒钟内发生的呼叫数量,您可以编写如下代码:

// 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调用来自己设置采样率。