如何在 ASP.Net Core 中使用 MiniProfiler

web应用程序的性能相信是大家普遍关心的一个问题,也相信大家有很多工具可用来分析应用程序的性能并能够找到其中的瓶颈,MiniProfiler 就是这个领域中的一款产品,它是一款简单的,功能强大的web应用分析工具,MiniProfiler 可用来帮助我们找到 慢查询, 慢响应 等问题。

MiniProfiler 可用在 Asp.NetASP.Net Core 中,这篇文章将会讨论如何使用 MiniProfiler,并通过它找到应用程序的性能问题。

安装 MiniProfiler

要想使用 MiniProfiler,需要通过 nuget 引用 MiniProfiler.AspNetCore.Mvc 包,可以通过 Visual Studio 2019 的 NuGet package manager 可视化界面安装 或者 通过 NuGet package manager 命令行工具输入以下命令:


dotnet add package MiniProfiler.AspNetCore.Mvc

安装好之后,接下来就要将 MiniProfiler 注入到 ServiceCollection 容器中,如下代码所示:

// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews();services.AddMiniProfiler(options => options.RouteBasePath = "/profiler");}

注入好之后,接下来就需要使用 UseMiniProfiler 扩展方法将其注入到 Request Pipeline 管道中,如下代码所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory){app.UseMiniProfiler();app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");});}

然后在 _Layout.cshtml 页面中增加如下两行命令。


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

最后需要在 WebPage 中指定 MiniProfiler 分析窗口应该显示的位置,那如何做呢?在 body 标签内使用 mini-profiler 标记,如下代码所示:


<mini-profiler position="@RenderPosition.Right" max-traces="5" />

在 ASP.Net Core MVC 中使用 MiniProfiler

MiniProfiler 会提供 页面加载时间数据库查询性能指标,接下来把程序跑起来,你会看到如下的性能指标图。

有些朋友可能就要问了,大体时间我是知道了,那如果我只想获取某一指定代码块的执行时间呢?当然也是可以的,下面的代码展示了如何去实现。

public class HomeController : Controller{ILogger<HomeController> logger;public HomeController(ILogger<HomeController> logger){this.logger = logger;}public IActionResult Index(){var miniProfiler = MiniProfiler.Current;List<Author> authors = new List<Author>();miniProfiler.RenderIncludes(this.HttpContext);using (miniProfiler.Step("Get Authors")){authors.Add(new Author() { Id = 1, FirstName = "Joydip", LastName = "Kanjilal", Address = "Hyderabad, India" });authors.Add(new Author() { Id = 2, FirstName = "Stephen", LastName = "Smith", Address = "NY, USA" });authors.Add(new Author() { Id = 3, FirstName = "Anand", LastName = "Narayanan", Address = "Chennai, India" });authors.Add(new Author() { Id = 4, FirstName = "Steve", LastName = "Jones", Address = "London, UK" });}return View(authors);}}public class Author{public int Id { get; set; }public string FirstName { get; set; }public string LastName { get; set; }public string Address { get; set; }}

从上面的代码中可以看到,我用 using (miniProfiler.Step("Get Authors")) 做了语句块标记,理论上 mini-profile 窗口上应该有类似 Get Authors 指标栏,接下来把程序跑起来,一起来看看效果。

除了顺向操作,你也可以指定让某些代码块不要显示在 mini-profile 中,需要做的是调用 Ignore() 即可,如下代码所示:


using (MiniProfiler.Current.Ignore())
{// Write code here that you don't// want MiniProfiler to profile
}

使用 MiniProfile 分析 ADO.NET 查询

除了做一些常规的页面分析,还可以直接对 ADO.NET 查询性能进行分析,这就????????了,要这么做的话,需要使用 ProfileDbConnectionProfileDbCommand 即可,如下代码所示:

public IActionResult Index(){using (SqlConnection connection = new SqlConnection(@"Data Source=.; Initial Catalog=PYZ_L; Trusted_Connection=Yes")){using (ProfiledDbConnection profiledDbConnection = new ProfiledDbConnection(connection, MiniProfiler.Current)){if (profiledDbConnection.State != System.Data.ConnectionState.Open){profiledDbConnection.Open();}using (SqlCommand command = new SqlCommand("Select * From Clothes", connection)){using (ProfiledDbCommand profiledDbCommand = new ProfiledDbCommand(command, connection, MiniProfiler.Current)){var data = profiledDbCommand.ExecuteReader();//Write code here to populate the list of Authors}}}}return View();}

从上图可以看到,确实对 ADO.NET 查询有着清晰的分析,相信在帮助大家分析问题时很有帮助。

MiniProfiler 是一个可应用于 .NET, Ruby, Go 和 Node.js 的性能分析工具,你可以使用 MiniProfiler 去分析 Dapper,Linq2SQL,Entity Framework 所使用的sql的查询性能,此外 MimiProfile 之所以 Mini,意味着它介入到你的应用程序中所带来的性能开销微乎其微,所以大家可放心的丢到生产上去吧!

译文链接:https://www.infoworld.com/article/3330560/how-to-use-miniprofiler-in-aspnet-core.html

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

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

相关文章

java 计时_Breitling(百年灵)世界时间终极计时腕表

所有热爱旅行的冒险家可以尽情期待&#xff0c;一款适合所有手腕的全新尺寸“旅行计时腕表”将在今年巴塞尔表展上华彩亮相。百年灵世界时间终极计时腕表(Chronomat 44 GMT)&#xff0c;适合腕间的完美尺寸&#xff0c;便捷的三时区时间显示&#xff0c;超凡的百年灵自产机芯&a…

python时钟罗盘酷炫代码_抖音上的时钟屏保,被我改造完用来表白

作者&#xff1a;爱编程的小和尚原文链接&#xff1a;https://blog.csdn.net/Newbie___/article/details/105378852抖音上很火的时钟屏保&#xff0c;被我改造完后用来准备准备准备表白&#xff0c;谁说程序员不浪漫&#xff1f;&#xff01;不知道一直关注小编我的小伙伴们之前…

大数据|意不意外?今年卖得最好的月饼是这个馅的……

中秋节&#xff0c;你家的月饼都吃完了吗&#xff1f; 淘宝、天猫、京东、苏宁易购等各大电商平台近日相继发布“月饼大数据”。透过这些大数据&#xff0c;我们来看看今年的“月饼消费”有哪些新趋势&#xff1f; 五仁稳居销量“老大哥” 五仁桂花、五仁肉松、五仁牛肉、五仁…

使用FuncT, TResult 委托实现API日志的记录

问题平常我们开发web api的时候&#xff0c;一般是需要记录api的输入输出信息&#xff0c;方便后续排查问题&#xff1b;那么我们一般怎么做的&#xff0c;一般是我们在一个公共地方的写个公共方法控制输入输出。这时候Func<T, TResult> 委托就派上用场。什么是FuncFunc&…

xencenter vgpu 看不见_有一种设计是“看不见,但感受得到”

设计源于生活&#xff0c;设计改变生活。在从业10余年之久的设计师刘洋来看&#xff0c;设计就是带着初心&#xff0c;不断去改变&#xff0c;去创造&#xff0c;去将更多设计的理念投射到时代的潮流中。刘洋认为设计不止是视觉感受&#xff0c;更重要的是融入人的情感&#xf…

数学告诉你家庭关系的奥秘

一直跟踪家庭关系可能非常困难。如果你父亲表弟的女儿刚刚生了一个小男孩&#xff0c;你们两个人怎样被相互介绍&#xff1f;谁是你的"曾曾姑母"&#xff1f;怎样发现你的"移去两次的第一代表亲"&#xff1f;幸运的是&#xff0c;一点儿数学逻辑可以帮助澄…

sql server2005 分页特性

在sql server 2005的新功能中&#xff0c;比较西黄分页功能&#xff0c;通过查询函数row_number over(order by field)实现是提取分页数据当页的记录&#xff0c;此功能原理上和临时表差不多&#xff0c;不过通过插叙语句操作就快捷多了&#xff0c;做了个demo&#xff0c;分页…

c#爬虫-1688官网自动以图搜图

背景在1688有个功能&#xff0c;就是上传图片&#xff0c;就可以找到类似的商品。如下网址 &#xff1a;https://www.1688.com/这时候&#xff0c;我们可以使用程序来代替&#xff0c;大批量的完成图片上传功能。实现思路1、找到图片上传接口post请求&#xff0c;form表单中有s…

php代码里加图片,php如何添加图片

php如何添加图片&#xff1f;php中插入图片的代码是什么&#xff1f;PHP插入图片&#xff0c;实际还是输出HTML代码比如&#xff1a;echo ;还可以直接用PHP生成图片显示出来php的gd库可以生成多种图像文件&#xff0c;如gif,png,jpg,wbmp,xpm等&#xff0c;下面来看一个生成正方…

matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com权重改进的粒子群算法在微粒群算法的可调整参数中&#xff0c;惯性权重 是最重要的参数&#xff0c;较大的 …

两个list怎么对比数据_基于日志的回放对比系统设计

‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦&#xff5e;作者&#xff1a;马力部门&#xff1a;新零售测试一、背景上半年公司的网关系统进行了重构&#xff0c;需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求&#xff0c;为商家提供各…

让人眼花缭乱的视错觉,太酷炫了!

盯~ 原理&#xff1a;这只死盯着人看的小短手并不是一个普通的纸模&#xff0c;它的眼睛鼻子和嘴也都不在正常的位置上&#xff0c;它的脸其实是凹下去的。 错觉的关键在于我们的大脑对凹面和凸面的加工方式&#xff0c;以及大脑对从图形中挑出一张脸的执着和能力。大脑想要…

swot分析模板_什么是SWOT分析图?怎样绘制SWOT分析思维导图,这样操作很简单

什么是SWOT分析图&#xff1f;大到企业小到个人都会使用到SWOT来对自身所具备的能力进行分析&#xff0c;这也印证了SWOT分析图的重要性&#xff0c;下面我们一起来深度了解SWOT分析吧&#xff01;&#xff01;一&#xff1a;什么是SWOT分析图所谓SWOT分析图是基于内外部竞争环…

有哪些命令行的软件堪称神器?

ag 比grep、ack更快的递归搜索文件内容。 tig 字符模式下交互查看git项目&#xff0c;可以替代git命令。 mycli mysql客户端&#xff0c;支持语法高亮和命令补全&#xff0c;效果类似ipython&#xff0c;可以替代mysql命令。 jq json文件处理以及格式化显示&#xff0c;支持高…

代码 | 一天一点代码坏味道(1)

【代码精进】| 总结/Edison Zhou作为一个后端工程师&#xff0c;想必在职业生涯中都写过一些不好维护的代码。本文是我学习《代码之丑》的学习总结&#xff0c;今天第一天发车&#xff0c;先来看看在命名上的一些常犯的坏味道。0为何要品代码坏味道Martin Flower在《重构》一书…

python base64编码_JS和Python实现AES算法

1. AES原理AES算法是典型的对称加密算法&#xff0c;AES原理可以学习这两篇文档&#xff1a;漫画&#xff1a;什么是AES算法&#xff1a;https://www.toutiao.com/i6783550080784794124/AES加密算法的详细介绍与实现&#xff1a;https://blog.csdn.net/qq_28205153/article/det…

当你老了,一生最后悔什么?大数据告诉你!

‍ 当你老了&#xff0c;一生最后悔什么&#xff1f;

@scheduled注解配置时间_SpringBoot2.0实战(32)配置定时任务

定时任务的几种实现方式&#xff1a;Timer&#xff1a;Java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。一般用的较少。Quartz&#xff1a;使用Quartz&…

小心 Enum Parse 中的坑

小心 Enum Parse 中的坑Intro最近使用枚举的时候&#xff0c;踩了一个小坑&#xff0c;分享一下&#xff0c;主要是枚举从 int 值转成枚举时可能会遇到Sample来看下面的示例&#xff1a;首先定义一个枚举&#xff1a;public enum Color : byte {Red 0,Green 1,Blue 2, }来看…

python判断列表是否为空_Jinja2: 判断返回的列表是否为空

我们在使用 Python 或者 Ansible 来进行自动化任务的时候常常会进行一些数据的组合和提取来生成文件。但是我们需要为不同的情况来做分析和进行判断。如果我们需要对返回的 list 来进行提取的时候我们常常只是运行一个 for loop 就解决了问题。如果输出如下所示&#xff1a;{&q…