大比速: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