miniprofiler是一个简单且高效的小型分析器,可用于.net,ruby,go和node.js.
miniprofiler不是将自己附加到每一个方法上,因为这样会有强侵入性而且也不是专注于分析性能问题。

它是一个ado.net的分析器,可以分析对于ado.net(sql server、oracle等)、linq-to-sql、ef(code first&ef core)的原始调用(如生成的sql语句)。
可编程式的分析器,通过在想要分析的步骤上加上step。

miniprofiler官网:http://miniprofiler.com/
miniprofiler开源地址:https://github.com/miniprofiler/dotnet

miniprofiler在.netcore中使用起来非常的方便,配置简单,下面我们就来看一下怎么配置:

1、在web项目中安装 miniprofiler.aspnetcore.mvc 程序包。

2、在startup.cs的configureservices中配置miniprofiler,这里主要完成miniprofiler的自定义配置(如路由,如果没有特殊要求默认即可。)和内部服务在容器中的注入。

1 public void configureservices(iservicecollection services)
2 {
3     services.addminiprofiler();
4     services.addcontrollerswithviews();
5 }

3、在startup.cs的configure中配置miniprofiler,这里主要启用miniprofilermiddleware对http请求进行监控。

1 public void configure(iapplicationbuilder app, iwebhostenvironment env)
2 {
3     ......
4     app.useminiprofiler();
5     ......
6 }

4、在为数据库启用miniprofiler性能监控,将原有的_connection = new mysqlconnection(connectionstring);替换成_connection = new profileddbconnection(new mysqlconnection(connectionstring), miniprofiler.current);就可以了。

1 public unitofwork(iconfiguration configuration)
2 {
3     var connectionstring = configuration.getconnectionstring("sqlconnection");
4     _connection = new profileddbconnection(new mysqlconnection(connectionstring), miniprofiler.current);
5     _connection.open();
6 }

5、自定义监控,可以对指定的一段代码进行性能监控

1 public testdto get(string id)
2 {
3     using (miniprofiler.current.step("一个测试")) {
4         var test = _testdomain.get(id);
5         return test.mapto<testdto>();
6     }
7 }

最后我们来看一下成果:

 

 单机“share”可以查看详情

 

 根据监控的数据,我们就能很好的了解整个程序的性能情况。

 

源码地址:https://github.com/letnet/netcoredemo