大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)


近來在考慮一個服務選型,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM