在 ASP.Net Core 中使用 MiniProfiler的方法

web应用措施的机能相信是各人普遍体贴的一个问题,也相信各人有许多东西可用来阐明应用措施的机能并可以或许找到个中的瓶颈,MiniProfiler 就是这个规模中的一款产物,它是一款简朴的,成果强大的web应用阐明东西,MiniProfiler 可用来辅佐我们找到 慢查询, 慢响应 等问题。

MiniProfiler 可用在 Asp.Net 和 ASP.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 会提供 页面加载时间 和 数据库查询机能指标,接下来把措施跑起来,你会看到如下的机能指标图。

在 ASP.Net Core 中利用 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 指标栏,接下来把措施跑起来,一起来看看结果。

在 ASP.Net Core 中利用 MiniProfiler的要领

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

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

利用 MiniProfile 阐明 ADO.NET 查询

除了做一些通例的页面阐明,还可以直接对 ADO.NET 查询机能举办阐明,这就🐂👃了,要这么做的话,需要利用 ProfileDbConnection 和 ProfileDbCommand 即可,如下代码所示:

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(); }

在 ASP.Net Core 中利用 MiniProfiler的要领

从上图可以看到,确实对 ADO.NET 查询有着清晰的阐明,相信在辅佐各人阐明问题时很有辅佐。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjzjd.html