近來在考慮一個服務選型,dotnet提供了眾多的遠程服務形式。在只考慮dotnet到dotnet的情形下,我們可以選擇remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)其中我考察的重點是前4項的效率差異,而在我的測試項目中他們 ...
近來在考慮一個服務選型,dotnet提供了眾多的遠程服務形式。在只考慮dotnet到dotnet的情形下,我們可以選擇remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)
其中我考察的重點是前4項的效率差異,而在我的測試項目中他們共用同一個介面定義
[ServiceContract] public interface ICalc { [OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "cmd")] CalcInfo Calc(CalcInfo pInfo); }
先來對比傳入較為簡單的CalcInfo,該類的json只有如下,其中集合Items是空的
{ "id": 0, "method": "test", "para1": 0, "para2": 0, "result": 999, "items": [] }
測試從客戶端將一個CalcInfo的實例傳入服務端,服務端稍加修改Method返回給客戶端的過程,主要測試序列化與傳輸的用時。記錄執行10000次請求的總用時
Remoting用時 3.76s
WCF(http) 用時 21.92s
WCF(tcp)用時 5.96s
WCF(RESTful)用時 2.26s
asp.net Core(RESTfull)用時 16.59s
再來一下比較傳輸一個較大的CalcInfo,該類的json如下,其中items集合有100個子實例
{ "id": 0, "method": "test", "para1": 0, "para2": 0, "result": 999, "items": [ { "name": "test 1", "para1": 1, "para2": 0 }, { "name": "test 2", "para1": 2, "para2": 0 } //....共有100個子項 ] }
Remoting用時 12.94s
WCF(http) 用時 47.38s
WCF(tcp)用時 9.2s
WCF(RESTful)用時 10.67s
asp.net Core(RESTfull)用時 26.08s
把兩個時間放在一起對比一下就很有意思了。小流量時remoting比WCF強,WCF(TCP)莫名的高用時,比json的還要高。在大流量的時候WCF的優勢體現出來了,基本符合網上大致的觀點。其中WCF(RESTful)讓kevin-y印象深刻,幾乎與TCP一樣的成績
小流量
Remoting用時 3.76s
WCF(http) 用時 21.92s
WCF(tcp)用時 5.96s
WCF(RESTful)用時 2.26s
asp.net Core(RESTfull)用時 16.59s
大流量
Remoting用時 12.94s
WCF(http) 用時 47.38s
WCF(tcp)用時 9.2s
WCF(RESTful)用時 10.67s
asp.net Core(RESTfull)用時 26.83s
測試的源代碼來這
https://files.cnblogs.com/files/kevin-Y/SrvSpeed2.zip