欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

.net中MiniProfiler对接口响应速度的影响测试与结果分析

程序员文章站 2022-03-09 19:37:56
...

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      

 

四、结论

经过多次极端试验,得出结论:

  1. 请求次数与响应速度之间无相关关系;

  2. Miniprofiler会增加接口响应速度,增加量会随着数据量的变大而变大。

  3. 数据量为原来五倍大小时,接口响应速度会增加62%-132%。

  4. 数据量不变时,Miniprofiler对接口的响应速度影响为增加响应时间50%-55%。

  5. 数据量为五倍大小时,Miniprofiler对接口的响应速度影响为增加响应时间80%-87%

通过阅读Minirofiler的源码,个人猜测是因为在Miniprofiler在极端情况下之所以影响如此严重是因为他将监控数据序列化为字符串的过程造成的;当我插入数据量大时,sql语句会增多,就导致要序列化的数据就更多,所以变慢;但这也只是我个人猜测,没有仔细论证,所以还请各位大神多多指教。

之所以要对Miniprofiler进行如此极端测试完全是我好奇心的驱使,对于一般项目,事务中的SQL语句应该不会超过一百条(我瞎猜的,我做过的项目太少),对于一般项目Miniprofiler还是一款很不错的性能分析工具,当事务中的SQL为50条以内时,性能损耗几乎可以忽略不记(本人已做过测试,数据就不放了)。

如需Demo代码请留言给我欧,谢谢大家阅读,请多多指教!