内容简介:本文主要针对BeetleX和Asp.net Core在基础WebApi功能性能对比为了确保测试的基础功能一致性,因此所有测试的url和请求输出内容都是一致。以下是针对BeetleX和Asp.net Core实现的WebaApi基础功能代码:通过bombardier.exe工具对两个服务开启100个连接并进行10000000次请求响应测试。测试的url如下:
本文主要针对BeetleX和Asp.net Core在基础WebApi功能性能对比
测试环境描述
硬件配置:E1230V2 16G内存 10Gb带宽 操作系统:Windows server 2008 R2 + .Net Core 2.15 测试工具:bombardier.exe
测试功能代码
为了确保测试的基础功能一致性,因此所有测试的url和请求输出内容都是一致。以下是针对BeetleX和Asp.net Core实现的WebaApi基础功能代码:
asp.net core mvc webapi
public class HomeController : Controller { public class JsonMessage { public string message { get; set; } } public string plaintext() { return "Hello, World!"; } public object json() { return new JsonMessage { message = "Hello, World!" }; } public Employee Employee(int id) { Employee result = DataHelper.Defalut.Employees.Find(e => e.EmployeeID == id); if (result == null) result = new Employee(); return result; } public object Orders(int id, string customerid, int index, int size) { Func<Order, bool> exp = o => (id == 0 || o.EmployeeID == id) && (string.IsNullOrEmpty(customerid) || o.CustomerID == customerid); int count = DataHelper.Defalut.Orders.Count(exp); if (size == 0) size = 10; int pages = count / size; if (count % size > 0) pages++; var items = DataHelper.Defalut.Orders.Where(exp).Skip(index * size).Take(size); return items; } }
beetlex webapi
[Controller(BaseUrl = "Home")] public class Controller { public class JsonMessage { public string message { get; set; } } public object plaintext() { return new TextResult("Hello, World!"); } public object json() { return new JsonResult(new JsonMessage { message = "Hello, World!" }); } [Get(Route = "{id}")] public object Employee(int id) { Employee result = DataHelper.Defalut.Employees.Find(e => e.EmployeeID == id); if (result == null) result = new Employee(); return new JsonResult(result); } [Get(Route = "{id}")] public object Orders(int id, string customerid, int index, int size) { Func<Order, bool> exp = o => (id == 0 || o.EmployeeID == id) && (string.IsNullOrEmpty(customerid) || o.CustomerID == customerid); int count = DataHelper.Defalut.Orders.Count(exp); if (size == 0) size = 10; int pages = count / size; if (count % size > 0) pages++; var items = DataHelper.Defalut.Orders.Where(exp).Skip(index * size).Take(size); return new JsonResult(items); } }
测试方式
通过bombardier.exe工具对两个服务开启100个连接并进行10000000次请求响应测试。测试的url如下:
/home/plaintext //返回一个简单的Hello, World!文本 /home/json //返回一个简单的Hello, World! json对象 /home/employee/3 //返回一个记员的json对象 /home/orders/3?index=0&size=5 //返回对应雇员订单列表的json对象
测试结果
从测试结果来看在最基本的内容输出时,主要涉及是网络处理这一块,在这方面Beetlex webapi有着绝对性能的优势,可以说比Asp.net Core webapi高出两倍之多。但随着加入一些json处理功能逻辑处理占用比率高后性能的差异就不是非常突出(也说明一点Newtonsoft.Json在处理json的时候没有.net coret自己的处理高效),不过即使在后面返回订单列表的时候还具备着一倍的性能优势在。为了更进一步测试BeetleX的处理能,已经把测试代码提交上TechEmpower/FrameworkBenchmarks,在一下轮测试应该能看到BeetleX的身影出现。
测试结果详细数据
asp core webapi
D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:8080/home/plaintext" Bombarding http://192.168.2.18:8080/home/plaintext with 10000000 request(s) usin g 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 2m14s Done! Statistics Avg Stdev Max Reqs/sec 74691.94 3817.11 114988.50 Latency 1.33ms 488.74us 385.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 17.38MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:8080/home/json" Bombarding http://192.168.2.18:8080/home/json with 10000000 request(s) using 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 2m24s Done! Statistics Avg Stdev Max Reqs/sec 69093.60 3770.80 83161.12 Latency 1.44ms 549.52us 385.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 17.13MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:8080/home/employee/3" Bombarding http://192.168.2.18:8080/home/employee/3 with 10000000 request(s) usi ng 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 3m15s Done! Statistics Avg Stdev Max Reqs/sec 51224.14 2667.55 57796.82 Latency 1.95ms 637.04us 415.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 29.16MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:8080/home/orders/3?in dex=0&size=5" Bombarding http://192.168.2.18:8080/home/orders/3?index=0&size=5 with 10000000 r equest(s) using 100 connection(s) 10000000 / 10000000 [===========================================] 100.00% 5m7s Done! Statistics Avg Stdev Max Reqs/sec 32481.62 1568.13 36897.79 Latency 3.07ms 2.13ms 600.03ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 57.96MB/s
beetlex webapi
D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:9090/home/plaintext" Bombarding http://192.168.2.18:9090/home/plaintext with 10000000 request(s) usin g 100 connection(s) 10000000 / 10000000 [============================================] 100.00% 41s Done! Statistics Avg Stdev Max Reqs/sec 239341.58 39420.70 261535.62 Latency 413.11us 1.02ms 396.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 41.56MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:9090/home/json" Bombarding http://192.168.2.18:9090/home/json with 10000000 request(s) using 100 connection(s) 10000000 / 10000000 [============================================] 100.00% 54s Done! Statistics Avg Stdev Max Reqs/sec 184345.82 24707.02 208438.54 Latency 537.74us 1.07ms 395.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 34.64MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:9090/home/employee/3" Bombarding http://192.168.2.18:9090/home/employee/3 with 10000000 request(s) usi ng 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 1m12s Done! Statistics Avg Stdev Max Reqs/sec 138350.49 15090.09 162791.05 Latency 717.80us 1.14ms 397.02ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 70.33MB/s D:\>bombardier.exe -c 100 -n 10000000 "http://192.168.2.18:9090/home/orders/3?in dex=0&size=5" Bombarding http://192.168.2.18:9090/home/orders/3?index=0&size=5 with 10000000 r equest(s) using 100 connection(s) 10000000 / 10000000 [==========================================] 100.00% 2m26s Done! Statistics Avg Stdev Max Reqs/sec 68505.91 3209.14 72597.10 Latency 1.46ms 2.14ms 599.03ms HTTP codes: 1xx - 0, 2xx - 10000000, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 118.06MB/s
完整测试代码
https://github.com/IKende/FastHttpApi/tree/master/PerformanceTest/Beetlex_VS_AspCore_webapi
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Kubernetes 存储性能对比
- 快排和堆排性能对比
- 性能压测工具选型对比
- 性能对比:ReentrantLock vs Synchronized
- Mobx 与 Redux 的性能对比
- Protobuf的使用及性能对比测试
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux内核完全剖析
赵炯 / 机械工业出版社 / 2006-1 / 79.00元
本书对早期Linux操作系统内核全部代友文件进行了详细的剖析,旨在让读者在尽量短的时间内对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。虽然选择的版本较低,但该内核已能够正常编译运行,并且其中已包括了Linux工作原理的精髓。书中首先以Linux源代码版本的变迁为主线,简要介绍了Lin-ux系统的发展历史,同时着重说明了各个内核版本之间的主要区别和改进方......一起来看看 《Linux内核完全剖析》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
HSV CMYK 转换工具
HSV CMYK互换工具