我的目标是开发一个迷你基准工具,因此我可以测试Web API的性能。
我想使用简单的控制台应用程序以编程方式创建性能计数器。作为研究的一部分,我创建了下面的主要方法。这只是一个简单的测试。因此,基本上,我需要httpclient才能转发请求的x-number,然后查看此操作的一些指标(即处理器时间)。
我的逻辑正确吗?
隐藏复制代码
static void Main(string[] args)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var theCPUCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName);
Console.WriteLine(theCPUCounter.NextValue());
System.Threading.Thread.Sleep(1000);
for (int i = 0; i <= 5; i++)
{
HttpResponseMessage response = client.GetAsync("http://www.google.co.uk/").Result;
}
Console.WriteLine(theCPUCounter.NextValue());
}
我知道有一些性能计数器更有意义,但是就目前而言,我只想看看我是否正确理解。
如果以上是正确的,那么我的计划是:
1)使用httpclient和tpl共同创建各种吞吐量方案(即发送1000个并发请求,但每100次创建不同的方案,以便在Web API中使用各种资源)。一旦我执行这些方案,
2)我将发布用于测量CPU和内存的性能计数器。
那是计划。
您可以建议吗?
谢谢!
这里的基本问题是"如何使用PerformancCounters",您可以正确地获得该部分。您可以简化代码:
public static void Main()
{
var cpuSample = new System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", "_Total");
while(true)
{
Thread.Sleep(1000);
Console.WriteLine(cpuSample.NextValue() + " %");
}
}
您的帖子添加了HttpClient
的混合物,但这完全是正交的。您可以通过定期阅读样本来使用PerformanceCounters,并且值读是以前样本的间隔中的计数器值。
对于您的示例中的特定计数器(总CPU%),在样本之间的应用程序中所做的事情确实无关紧要(即10个HTTPCLIENT请求)。_total CPU%是全球值,它涵盖该主机上的所有应用程序和服务。
如果您有兴趣改善HTTP请求,请注意,您应该专注于其他地方。阅读在C#中调整httpwebrequest连接超时,也许是C#
尝试Metrics.net库:
https://github.com/recognos/metrics.net
您可以衡量这样的CPU使用率(和其他指标):
using Metrics;
Metric.Config
.WithHttpEndpoint("http://localhost:1234/")
.WithAllCounters();