.net中MiniProfiler对接口响应速度的影响测试与结果分析
MiniProfiler对接口响应速度的影响测试与结果分析
首次写博客,如有不足之处还请各位盆友不吝赐教。
Miniprofiler想必从事 .net后台开发的朋友或多或少都有所接触。本人由于工作需要,使用Miniprofiler对事务和参数化查询语句的执行情况做日志记录,以便查询事务和SQL执行情况,用于后期优化。接口请求所用工具为Postman,延时为0,分别做了200次请求和400次请求的测试。
一、软硬件参数如下
操作系统 | win10 |
---|---|
CPU | Intel(R)Core(TM)i5-4210U_CPU@1.70GHz |
核心数 | 4核 |
内存 | 8G |
Postman版本 | 7.2.2 |
注:每种试验次数均为10次,所有结果取10次结果均值,横向测试是指将body数据量扩大为原来的五倍
-
请求Body为100条学生数据,如下所示的学生对象
{
"sNo": 2,
"sex": "男",
"sName": "张三",
"room": "222",
"class": "信科152",
"regDate": "2019/7/1 0:00:00"
}
......99,
{
"sNo": 2,
"sex": "男",
"sName": "张三",
"room": "222",
"class": "信科152",
"regDate": "2019/7/1 0:00:00"
}
-
在过滤器中使用Miniprofiler的伪代码
public class ActionFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
MiniProfiler profiler = MiniProfiler.StartNew("New Access");
using (profiler.Step("Step1"))
{
await next();
}
//TODO
}
-
数据层使用Miniprofiler的伪代码
protected DbConnection GetConnection()
{
DbConnection connection = new SqlConnection(connectString);
return new ProfiledDbConnection(connection, MiniProfiler.Current);
}
二、100条数据插入接口测试结果如下
2.1、无Miniprofiler的接口测试数据
迭代次数 | 最低耗时(ms) | 最高耗时(ms) | 平均耗时(ms) | 请求成功率 |
---|---|---|---|---|
200 | 22.5 | 142.5 | 34.35 | 100% |
400 | 21 | 172.2 | 28.44 | 100% |
2.2、带Miniprofiler的接口测试数据
迭代次数 | 最低耗时(ms) | 最高耗时(ms) | 平均耗时(ms) | 请求成功率 |
---|---|---|---|---|
200 | 33.5 | 141.3 | 49.87 | 100% |
400 | 30.5 | 192.6 | 44.10 | 100% |
2.3、对比
分支 | 200次平均耗时 | 400次平均耗时 |
---|---|---|
原始 | 34.35 | 28.44 |
Miniprofiler | 49.87 | 44.10 |
三、500条数据插入接口测试结果如下
3.1、无Miniprofiler的接口测试数据
迭代次数 | 最低耗时(ms) | 最高耗时(ms) | 平均耗时(ms) | 请求成功率 |
---|---|---|---|---|
200 | 38.4 | 183.3 | 55.67 | 100% |
400 | 36 | 224.3 | 54.60 | 100% |
3.2、带Miniprofiler的接口测试数据
并发数 | 最低耗时(ms) | 最高耗时(ms) | 平均耗时(ms) | 请求成功率 |
---|---|---|---|---|
200 | 81.3 | 249 | 100.74 | 100% |
400 | 77.9 | 268.3 | 102.55 | 100% |
3.3、对比
分支 | 200次平均耗时 | 400次平均耗时 | 500次平均耗时 | 最低耗时 | 最高耗时 |
---|---|---|---|---|---|
原始 | 55.67 | 54.60 | |||
Miniprofiler | 100.74 | 102.55 |
四、结论
经过多次极端试验,得出结论:
请求次数与响应速度之间无相关关系;
Miniprofiler会增加接口响应速度,增加量会随着数据量的变大而变大。
数据量为原来五倍大小时,接口响应速度会增加62%-132%。
数据量不变时,Miniprofiler对接口的响应速度影响为增加响应时间50%-55%。
数据量为五倍大小时,Miniprofiler对接口的响应速度影响为增加响应时间80%-87%
通过阅读Minirofiler的源码,个人猜测是因为在Miniprofiler在极端情况下之所以影响如此严重是因为他将监控数据序列化为字符串的过程造成的;当我插入数据量大时,sql语句会增多,就导致要序列化的数据就更多,所以变慢;但这也只是我个人猜测,没有仔细论证,所以还请各位大神多多指教。
之所以要对Miniprofiler进行如此极端测试完全是我好奇心的驱使,对于一般项目,事务中的SQL语句应该不会超过一百条(我瞎猜的,我做过的项目太少),对于一般项目Miniprofiler还是一款很不错的性能分析工具,当事务中的SQL为50条以内时,性能损耗几乎可以忽略不记(本人已做过测试,数据就不放了)。
如需Demo代码请留言给我欧,谢谢大家阅读,请多多指教!