如何以编程方式创建性能计数器,以便基于Web API的完美标准



我的目标是开发一个迷你基准工具,因此我可以测试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#

中的高性能TCP服务器

尝试Metrics.net库:

https://github.com/recognos/metrics.net

您可以衡量这样的CPU使用率(和其他指标):

using Metrics;
Metric.Config
    .WithHttpEndpoint("http://localhost:1234/")
    .WithAllCounters();

相关内容

  • 没有找到相关文章

最新更新