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/art...

更多高质量干货:参见我的 GitHub: csharptranslate