2015-05-06 53 views
0

我的目標是開發一個迷你基準測試工具,以便測試Web Api的性能。如何以編程方式創建性能計數器,以便基準測試web api的性能

我想使用一個簡單的控制檯應用程序以編程方式創建性能計數器。作爲我的研究的一部分,我創建了下面的主要方法。這只是一個簡單的測試。所以基本上,我需要HttpClient來轉發x個請求,然後查看這個操作的一些指標(即處理器時間百分比)。

我的邏輯正確嗎?

隱藏複製代碼

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和內存的性能計數器。

這就是計劃。

你能提供建議嗎?

謝謝!

回答

1

這裏的根本問題是「如何使用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請求,那麼請注意,您應該專注於其他地方。閱讀Adjusting HttpWebRequest Connection Timeout in C#也許High performance TCP server in C#

+0

感謝您的答覆。 –

+0

感謝您的回覆。但是,我需要測量現有Web API的性能(如超級迷你基準測試工具),所以我需要使用性能計數器(以編程方式)。我知道我所做的是指總CPU百分比,但是如果我只爲當前進程執行操作,該怎麼辦?我需要獲得處理器和內存的指標。因此,我需要HttpClient,因爲我需要用x個請求錘擊服務器,然後使用計數器來檢索度量標準。我對改進Http請求不感興趣。我想確定潛在的瓶頸數量 –

相關問題