1

我使用Visual Studios負載測試項目進行負載/壓力測試,當前用戶設置爲10時很低。應用程序向WebAPI服務層/應用程序發出多個System.Net.Http.HttpClient請求(在某些情況下,它會調用另一個WebApi層/應用程序),並且在測試單個MVC4控制器(不解析依賴請求)時,它只能獲得大約30個請求/秒。Asp.Net HttpClient性能

這些數字基於一個示例項目,其中沒有真正的代碼在除HttpClient調用之外的任何層執行並構建要返回的模型的新集合(所以一些序列化也發生爲WebApi的一部分)。我已經嘗試了異步控制器和沒有,結果似乎非常相似(異步控制器略有改善)

雖然數據的性質和交通手段顯然緩存調用顯着增加(大約400 RPS)相當數量的呼叫不會被緩存在真實世界的場景中。

HttpClient(或一般的HTTP層)太貴了,還是有一些想法可以獲得更高的吞吐量?

可能值得注意的是,在我的本地開發機器上,這個負載測試也使CPU最大化。任何想法或建議將非常感激?

+0

這真的很難提供建設性的反饋意見時,有涉及到這麼多的變量,可以更改默認的連接限制。你的服務是否在同一臺機器上運行,不同的機器上,有多少網絡跳轉,你是否穿越域名等?由於您正在討論調用可調用其他Web API服務的Web API服務,因此您的請求中可能會有很多延遲。 –

+0

我見過HttpClient在開發機器上對本地web api執行12000 reqs/sec。但是有很多因素需要考慮。 HttpClient不應該增加很多開銷。 –

+0

示例應用程序包含一個應用程序中的所有層,所有這些層都在我的開發機器上本地運行。 它很有希望聽到你已經看到12000 HttpClient請求/秒。 – Timmo

回答

1

HttpClient具有2個併發連接的內置默認值。

您是否更改了默認值?

this answer

如果你追逐了HTTPClient的DEPS我相信,你會發現,它依賴於對ServicePointManager的設置。

this link

你可以通過調用System.Net.ServicePointManager.DefaultConnectionLimit

+0

在某些情況下,您必須顯式設置DefaultConnectionLimit以使其對HttpClient有影響。我的經驗一直存在,除非你設置它,你會看到無限數量的連接,這實際上會讓你的表現更糟糕。 –

+0

你可以定義這些場景嗎?我一直都看到2連接默認強制執行... – CtrlDot

+0

嘗試從控制檯應用程序使用httpclient。 –