MiniProfiler WebAPI 分析工具

news2024/12/26 21:59:32

一、介绍🛠️

 MiniProfiler  是一款简单但有效的 .NET、Ruby、Go 和 Node.js 微型 性能分析器 

 MiniProfiler  不会将自身附加到每个方法调用;那会太具有侵入性,并且不会专注于最大的性能问题。相反,它提供:

🔸ADO.NET 探查器,能够分析对原始 ADO.NET SQL ServerOracle 等)、 LINQ to-SQL 、实体框架(包括 Code First EF Core )以及一系列其他数据访问方案的调用。

🔸一种实用的 Step 插桩,您可以将其添加到要显式分析的代码中。

 🔗【官网】:https://miniprofiler.com/

二、安装 🔌

这里我们默认环境使用.NET6 , 当然也支持.NET8 ,这里只是简单演示一下。我们可以使用Nuget来下载这个包。

PM> Install-Package MiniProfiler.AspNetCore.Mvc

2.1 配置  Startup.cs

在 ConfigureServices方法中添加 MiniProfiler 服务

public void ConfigureServices(IServiceCollection services)
{
   services.AddMiniProfiler(options =>
      options.RouteBasePath = "/profiler"
   );
}
  • 这里是配置了  MiniProfiler  的路由基础路径,默认的路径是 /mini-profiler-resources 
  • 按照当前配置,你可以使用  "/profiler/results"  来访问分析报告

2.2 激活中间件

启用  MiniProfiler  服务

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
   app.UseMiniProfiler();
}

2.3 监控分析业务

public class ValueController : ControllerBase
{
   [HttpGet]
   public IEnumerable<string> Get()
   {
      string url1 = string.Empty;
      string url2 = string.Empty;
      using (MiniProfiler.Current.Step("Get方法"))
      {
         using (MiniProfiler.Current.Step("准备数据"))
         {
            using (MiniProfiler.Current.CustomTiming("SQL", "SELECT * FROM Config"))
            {
               // 模拟一个SQL查询
               Thread.Sleep(500);
               
               url1 = "https://www.baidu.com";
               url2 = "https://www.sina.com.cn/";
            }
         }
         
         
         using (MiniProfiler.Current.Step("使用从数据库中查询的数据,进行Http请求"))
         {
            using (MiniProfiler.Current.CustomTiming("HTTP", "GET " + url1))
            {
               var client = new WebClient();
               var reply = client.DownloadString(url1);
            }
 
            using (MiniProfiler.Current.CustomTiming("HTTP", "GET " + url2))
            {
               var client = new WebClient();
               var reply = client.DownloadString(url2);
            }
         }
      }
      return new string[] { "value1", "value2" }; 
   }
}

代码解释:

 MiniProfiler.Current.Step  方法定义了分析的步骤,这个方法可以接受一个  String  类型的参数,它会显示在最终的报告中
 MiniProfiler.Current.CustomTiming  方法是更细粒度的对报告内容进行分类,以上代码中定义了2种分类,一种是  SQL  一种是 Http

上述程序的功能: 模拟从数据库拉取2个网站的 Url , 并使用 WebClient 来分别请求网站的 Url

2.4 查看分析结果

下面我们启动项目, 项目默认打开 /api/values 

然后我们来访问以下  /profiler/results  , 就会出现如下页面

 

如上图所示,我们可以很清楚的看到代码中每一部分的耗时,由于我们添加了2种分类 SQL Http,所以列表中会对2种分类进行汇总。

重点: 当前页面只会显示 最近的一次请求 

从当前报告中可以得到以下结论

  • 当前请求总响应时间 1723.6ms
  • SQL语句查询耗时 517.ms
  • 2次 Http 请求共耗时 868.3ms , 其中访问百度耗时 424.6ms, 访问新浪耗时 443.7ms

三、Swagger 集成

 MiniProfiler  和  Swagger  是可以集成在一起的,为了完成这个功能,我们需要进行以下几步下载Swagger自定义页面。

3.1 下载脚本代码

🎯默认的  index.html  页面可以从如下链接下载 :

Swashbuckle.AspNetCore/src/Swashbuckle.AspNetCore.SwaggerUI/index.html at master · domaindrivendev/Swashbuckle.AspNetCore · GitHub

下载之后将这个文件放置到 项目根目录 下。

📑接下来我们需要在这个  文件的头部  加入如下脚本代码:

<script async="async" id="mini-profiler" src="/profiler/includes.min.js?v=4.0.138+gcc91adf599" 
        data-version="4.0.138+gcc91adf599" data-path="/profiler/" 
        data-current-id="4ec7c742-49d4-4eaf-8281-3c1e0efa748a" data-ids="" data-position="Left" 
        data-authorized="true" data-max-traces="15" data-toggle-shortcut="Alt+P" 
        data-trivial-milliseconds="2.0" data-ignored-duplicate-execute-types="Open,OpenAsync,Close,CloseAsync">
</script>

最后我们需要配置这个  index.html  文件的  Bulid Action  为  Embedded resource 

 

3.2 配置自定义页面

 Startup.cs文件中,我们需要修改 UseSwaggerUI中间件的配置,这里我们需要添加一个InputStream 配置。

app.UseSwaggerUI(c =>
{
   c.RoutePrefix = "swagger";
   c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
   c.IndexStream = () => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("MiniProfilerSample.index.html");
});

🎯注意:这里 MiniProfilerSample是项目的 命名空间 名

3.3 最终效果

重新启动项目, Swagger  文档页面的左上角就出现了一个小的面板,当模拟请求一个连接之后,它就会显示出当前请求的分析数据,看起来是不是很酷炫。

四、总结

本篇博客描述了如何使用  MiniProfiler  来监控分析你的Api。  MiniProfiler  除了提供网页显示报告,还支持将报告结果存储在数据库中。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java个人博客系统项目文档

项目名称 Java个人博客系统 项目概述 该博客系统是一个多功能的Java应用程序。该系统支持用户发布新文章、浏览他人文章、管理个人文章收藏和删除不再需要的文章。通过该博客系统&#xff0c;用户可以享受一个安全、便捷的在线写作和阅读体验。 运行环境 编程语言&#xff1…

华为HarmonyOS 让应用快速拥有账号能力 - 获取用户头像昵称

场景介绍 如应用需要完善用户头像昵称信息&#xff0c;可使用Account Kit提供的头像昵称授权能力&#xff0c;用户允许应用获取头像昵称后&#xff0c;可快速完成个人信息填写。以下只针对Account kit提供的头像昵称授权能力进行介绍&#xff0c;若要获取头像还可通过场景化控…

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置

文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…

StarRocks存算分离在得物的降本增效实践

一、背景 OLAP引擎在得物的客服、风控、供应链、投放、运营、ab实验等大量业务场景发挥重要作用&#xff0c;在报表、日志、实时数仓等应用场景都有广泛的应用。 得物引入和使用OLAP引擎的过程中&#xff0c;每个业务都基于自己的需求选择当时最适合自己的引擎。现在得物内部同…

L15.【LeetCode笔记】相同的树

目录 1.题目 代码模板 2.分析 通过合理的if判断分类讨论两个根节点 1.首先,p和q都为NULL的情况最好排除 2.排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULL 写法1 写法2 3.只剩下最后一种情况:p和q都不为NULL 3.代码 提交结果 1.题目 https…

TCP协议(一)

TCP协议&#xff08;一&#xff09; 一、TCP协议1、介绍2、主要特点 二、TCP协议段格式1、示意图2、介绍 三、确认应答机制1、基本流程2、作用3、示意图4、序列号示意图 四、超时重传机制1、介绍2、重传超时时间3、往返时间4、平滑往返时间5、系统实现6、数据丢失重传示意图7、…

单链表---链表分割

将小于x的结点放在前面&#xff0c;大于等于x的结点放在后面&#xff0c;不改变结点相对位置&#xff0c;输出更改后的链表首结点。 typedef struct ListNode {ListNode* next;int val; }ListNode; 思路&#xff1a;我们可以新创建两个链表指针&#xff0c;将小于x的结点全部…

Android V reboot重启后电量从0直接跳到100%

问题背景 设备每次重启之后statusBar的电量百分比一开始是0,然后过了2s左右的样子电量才恢复为100% 解决方案 看拿到的串口日志来看,重启之后 healthd 拿到的电量值都是100%,而且这一块的电量也没有变化,重启前后电量都是100%: 自己尝试复现,在Android 15上测试重启,…

【技巧】Mac上如何显示键盘和鼠标操作

在制作视频教程时&#xff0c;将键盘和鼠标的操作在屏幕上显示出来&#xff0c;会帮助观众更容易地理解。 推荐Mac上两款开源的小软件。 1. KeyCastr 这款工具从2009年至今一直在更新中。 https://github.com/keycastr/keycastr 安装的话&#xff0c;可以从Github上下载最…

C 语言学习的经典书籍有哪些?

学习C语言的理由 C语言是一种程席设计语言&#xff0c;它是由美国AT&T公司贝尔实验室的Dennis Ritchie于1972年发明的。C语言之所以流行&#xff0c;是因为它简单易用。学习C语言的几个理由如下&#xff1a; (1)C、C#和Java使用一种被称为面向对象程序设计(0bject-Orient…

leetcode 52. N 皇后 II 困难

n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;2 解释&#xff1a;如上图所示&#…

谷歌浏览器中搜索引擎的设置与管理

谷歌浏览器作为全球最受欢迎的网络浏览器之一&#xff0c;以其高速、稳定和丰富的功能深受用户喜爱。对于许多用户来说&#xff0c;自定义和管理搜索引擎是提升浏览体验的重要一环。本文将详细介绍如何在谷歌浏览器中设置和管理搜索引擎&#xff0c;包括如何修改默认搜索引擎、…

掌上单片机实验室 — RT - Thread+ROS2 浅尝(26)

前面化解了Micro_ROS通讯问题&#xff0c;并在 RT-Thread Studio 环境下&#xff0c;使用Micro_ROS软件包中的例程&#xff0c;实现了STM32F411CE核心板和ROS2主机的通讯。之后还尝试修改例程 micro_ros_sub_twist.c &#xff0c;实现了接收 turtle_teleop_key 所发出的 turtle…

什么是Batch Normalization?

一、概念 Batch Normalization是在2015年提出的数据归一化方法&#xff0c;主要用在深度神经网络中激活层之前。它的主要作用是加快模型训练时的收敛速度&#xff0c;使模型训练过程更加稳定&#xff0c;避免梯度爆炸或消失&#xff0c;并起到一定的正则化作用&#xff0c;有时…

【Linux】文件操作的艺术——从基础到精通

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da;前言&#xff1a;一切皆文件 &#x1f4da;一、C语言的文件接口 &#x1f4d6;1.文件打…

谷歌流量怎么提升?

用好内容满足用户需求&#xff0c;谷歌流量的提升并非一蹴而就&#xff0c;尤其是行业差异会导致流量效果的巨大差距。无论你做哪个行业&#xff0c;谷歌流量的核心始终是内容&#xff0c;用户需要的是解决问题的信息。相比于花费精力追求热门词&#xff0c;注重内容的深度和实…

运输层3——TCP协议(重点!!!)

目录 一、TCP协议的特点 二、TCP连接 三、TCP的可靠传输&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09; 1、停止等待协议 &#xff08;1&#xff09;无差错情况 &#xff08;2&#xff09;出现差错 &#xff08;3&#xff09;确认分组丢失 和 确认分…

LeetCode题练习与总结:排列硬币--441

一、题目描述 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算并返回可形成 完整阶梯行 的总行数。 示例 1&#xff1a; 输…

数据查找文件夹里Excel、Word文件

我经常需要处理大量的Excel文件&#xff0c;为了解决查找数据时的困扰&#xff0c;我编写了一个小工具。这个工具可以搜索文件夹下的所有Excel文件&#xff0c;只需输入你想查找的字符串&#xff0c;它就会告诉你该字符串出现在哪个Excel文件的哪个表格中。 下载地址&#xff…

每天下午16:20达梦数据库干什么?

家里有达梦的朋友注意了&#xff0c;如果您用的是试用版&#xff0c;那么通常1年后数据库就不允许使用了&#xff0c;这是因为缺少正式许可&#xff0c;通常保存在 $DM_HOME/bin/dm.key 文件中 这个1年的时间从软件发布日期算&#xff0c;例如&#xff1a;从官方网站下载的 dm…