前言:

 在日常开发中,应用程序的性能是我们需要关注的一个重点问题。当然我们有很多工具来分析程序性能:如:Zipkin等;但这些过于复杂,需要单独搭建。

 MiniProfiler就是一款简单,但功能强大的应用新能分析工具;可以帮助我们定位:SQL性能问题、响应慢等问题。

 本篇文章将介绍MiniProfiler在Asp.Net Core中如何使用

一、MiniProfiler介绍

 MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序。可以对一个页面本身,及该页面通过直接引用、Ajax、Iframe形式访问的其它页面进行监控,监控内容包括数据库内容,并可以显示数据库访问的SQL(支持EF、EF CodeFirst等 )。并且以很友好的方式展现在页面上。

MiniProfiler官网:http://miniprofiler.com/

MiniProfiler的一个特别有用的功能是它与数据库框架的集成。除了.NET原生的 DbConnection类,MiniProfiler还内置了对实体框架(Entity Framework)以及LINQ to SQL、RavenDb和MongoDB的支持。任何执行的Step都会包括当时查询的次数和所花费的时间。为了检测常见的错误,如N+1反模式,profiler将检测仅有参数值存在差异的多个查询。

二、MiniProfiler用法

 1、Nuget包安装:

  1. //Mvc
  2. Install-Package MiniProfiler.AspNetCore.Mvc
  3. //EF分析添加
  4. Install-Package MiniProfiler.EntityFrameworkCore

 2、配置MiniProfiler:修改Startup.cs

  a) 注入MiniProfiler

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. // ...其他配置...
  4.  
  5. // 注入MiniProfiler
  6. services.AddMiniProfiler(options =>
  7. {
  8. //访问地址路由根目录;默认为:/mini-profiler-resources
  9. options.RouteBasePath = "/profiler";
  10. //数据缓存时间
  11. (options.Storage as MemoryCacheStorage).CacheDuration = TimeSpan.FromMinutes(60);
  12. //sql格式化设置
  13. options.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();
  14. //跟踪连接打开关闭
  15. options.TrackConnectionOpenClose = true;
  16. //界面主题颜色方案;默认浅色
  17. options.ColorScheme = StackExchange.Profiling.ColorScheme.Dark;
  18. //.net core 3.0以上:对MVC过滤器进行分析
  19. options.EnableMvcFilterProfiling = true;
  20. //对视图进行分析
  21. options.EnableMvcViewProfiling = true;
  22.  
  23. //控制访问页面授权,默认所有人都能访问
  24. //options.ResultsAuthorize;
  25. //要控制分析哪些请求,默认说有请求都分析
  26. //options.ShouldProfile;
  27.  
  28. //内部异常处理
  29. //options.OnInternalError = e => MyExceptionLogger(e);
  30. })
  31. // AddEntityFramework是要监控EntityFrameworkCore生成的SQL
  32. .AddEntityFramework();
  33. }

  b) 启用MiniProfiler  

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IMemoryCache cache)
  2. {
  3. // ...其他配置
  4.  
  5. //该方法必须在app.UseEndpoints以前
  6. app.UseMiniProfiler();
  7.  
  8. app.UseEndpoints(routes =>
  9. {
  10. // ...
  11. });
  12. }

  c) MVC项目:

   修改 _ViewImports.cshtml    

  1. @using StackExchange.Profiling
  2. @addTagHelper *, MiniProfiler.AspNetCore.Mvc

   将MiniProfiler添加到布局文件(Shared/_Layout.cshtml)中

  1. <mini-profiler />

  d) 运行效果:

三、 Swagger UI接入MiniProfiler

 使用步骤和前面大体一样

 1、下载Swagger页面:

  请先在Github中下载对应版本的swagger页面:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerUI/index.html

 2、添加到项目中,并设置index.html为:内嵌资源

  

 3、修改UseSwaggerUI中间件的配置

  1. app.UseSwaggerUI(c =>
  2. {
  3. //AuditLogDemo项目命名空间
  4. c.SwaggerEndpoint("/swagger/v1/swagger.json", "AuditLogDemo API V1");
  5. c.IndexStream = () => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("AuditLogDemo.wwwroot.index.html");
  6. });

 4、获取MiniProfiler的html代码片段 

  1. /// <summary>
  2. /// 获取html片段
  3. /// </summary>
  4. /// <returns></returns>
  5. [HttpGet]
  6. [Route("GetHtml")]
  7. public IActionResult GetHtml()
  8. {
  9. var html = MiniProfiler.Current.RenderIncludes(HttpContext);
  10. return Ok(html.Value);
  11. }

  

 5、在Swagger的Html中添加获取的MiniProfiler片段

  1. <!-- HTML for static distribution bundle build -->
  2. <script async="async" id="mini-profiler" src="/profiler/includes.min.js?v=4.2.22+4563a9e1ab"
  3. data-version="4.2.22+4563a9e1ab" data-path="/profiler/"
  4. data-current-id="0601948b-d995-4a86-9cae-33d73ecd2f59"
  5. data-ids="0601948b-d995-4a86-9cae-33d73ecd2f59"
  6. data-position="Left"
  7. data-scheme="Dark"
  8. data-authorized="true"
  9. data-max-traces="15"
  10. data-toggle-shortcut="Alt+P"
  11. data-trivial-milliseconds="2.0"
  12. data-ignored-duplicate-execute-types="Open,OpenAsync,Close,CloseAsync"></script>
  13.  
  14. <!-- HTML for static distribution bundle build -->
  15. <!DOCTYPE html>
  16. <html lang="en">
  17. <head>
  18. <meta charset="UTF-8">
  19. <title>%(DocumentTitle)</title>
  20. ……

 6、调用效果:

  

  如上图可以查看到所有请求路径及Sql操作耗时,那么如果需要监控指定代码块耗时如何实现呢

四、自定义标记:

   1、添加标记代码:

  1. var miniPro = MiniProfiler.Current;
  2. using (miniPro.Step("Add AuditLog"))
  3. {
  4. //保存审计日志
  5. await _auditLogService.SaveAsync(auditInfo);
  6. }

  

 2、取消监控方式:  

  1. using(MiniProfiler.Current.Ignore())
  2. {
  3. //代码
  4. }

 3、当然MiniProfiler还有很多其他功能等待解锁:如监控ADO.NET执行耗时,需要使用:ProfileDBConnection 和 ProfileDBCommand对象:

总结:

 1、MiniProfiler使用非常简单
 2、功能满足日常中程序性能优化相关问题

其他: 

 MiniProfiler的监控列表地址:http://{xxx}/profiler/results-index

    

MiniProfiler性能分析工具— .Net Core中用法的更多相关文章

  1. sar命令,linux中最为全面的性能分析工具之一

    sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工具将对系统当前的状态就行取样,然后通 ...

  2. Linux性能分析工具的安装和使用

    转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...

  3. 系统级性能分析工具perf的介绍与使用[转]

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  4. valgrind和Kcachegrind性能分析工具详解

    一.valgrind介绍 valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行某种类型的调试.分析或类似的任务, ...

  5. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  6. Linux 性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  7. [转]Linux性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  8. 超全整理!Linux性能分析工具汇总合集

    转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...

  9. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)

    此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...

随机推荐

  1. MySQL 设置保留几天的binlog

    1 ) 查看默认的日志保存天数: mysql> show variables like 'expire_logs_days'; +------------------+-------+ | Va ...

  2. DHCP最佳实践(三)

    这是Windows DHCP最佳实践和技巧的最终指南. 如果您有任何最佳做法或技巧,请在下面的评论中发布它们. 在本指南(三)中,我将分享以下DHCP最佳实践和技巧. 仅在需要时才使用IP冲突检测 运 ...

  3. 【Linux】ethtool 用法

    ethtool命令用于获取以太网卡的配置信息,或者修改这些配置.这个命令比较复杂,功能特别多. 语法 ethtool [ -a | -c | -g | -i | -d | -k | -r | -S | ...

  4. 使用 gRPCurl 调试.NET 5的gPRC服务

    介绍 你用过 Curl 吗?这个工具允许你通过 http 来发送数据,现在有一个适用于gGRPC的工具,gRPCurl,在本文中,我将介绍如何下载安装这个工具,然后通过这个工具调试我们.NET 5上面 ...

  5. LeetCode404.左叶子之和

    题目 法一.广度优先搜索 1 class Solution { 2 public: 3 int sumOfLeftLeaves(TreeNode* root) { 4 if(root == NULL) ...

  6. 基于.NET Core的优秀开源项目合集

    开源项目非常适合入门,并且可以作为体系结构参考的好资源, GitHub中有几个开源的.NET Core项目,这些项目将帮助您使用不同类型的体系结构和编码模式来深入学习 .NET Core技术, 本文列 ...

  7. Flask中的g到底是个什么鬼?

    g到底是个什么鬼? 在一次请求请求的周期,可以在g中设置值,在本次的请求周期中都可以读取或复制. 相当于是一次请求周期的全局变量. from flask import Flask,g app = Fl ...

  8. 炸裂!MySQL 82 张图带你飞

    之前两篇文章带你了解了 MySQL 的基础语法和 MySQL 的进阶内容,那么这篇文章我们来了解一下 MySQL 中的高级内容. 其他文章: 138 张图带你 MySQL 入门 47 张图带你 MyS ...

  9. 盼望着,盼望着。它终于来了!!!剪辑Windows PC测试版!

    盼望着,盼望着.它终于来了!!!剪辑Windows PC测试版! 喜欢短视频抖音的小伙伴们,是不是都对手机抖音剪映操作不是很满意.期待WINDOWS电脑版剪映的来临.在此之前只有MAC版本,不能满足广 ...

  10. Linux文件系统之INode

    本文转载自阮一峰博客:理解inode 一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存51 ...