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

 更新时间:2021年04月08日 15:50:11   作者:码农读书  
这篇文章主要介绍了在 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,意味着它介入到你的应用程序中所带来的性能开销微乎其微,所以大家可放心的丢到生产上去吧!

到此这篇关于在 ASP.Net Core 中使用 MiniProfiler的方法的文章就介绍到这了,更多相关 ASP.Net Core 使用 MiniProfiler内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • .Net6.0+Vue3实现数据简易导入功能全过程

    .Net6.0+Vue3实现数据简易导入功能全过程

    最近在用VUE做一个数据导入的功能,下面这篇文章主要给大家介绍了关于使用.Net6.0+Vue3实现数据简易导入功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • Redis中pop出队列多个元素思考

    Redis中pop出队列多个元素思考

    本文主要介绍了Redis中pop出队列多个元素思考,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 实现Asp与Asp.Net共享Session的方法

    实现Asp与Asp.Net共享Session的方法

    这篇文章主要介绍了实现Asp与Asp.Net共享Session的方法,需要的朋友可以参考下
    2014-08-08
  • ASP.NET 多次提交的解决办法

    ASP.NET 多次提交的解决办法

    只要把这2个方法放到页面最下面(就是调用scriptmanager的RegisterStartupScript方法)
    2008-12-12
  • 在.net中用CheckBoxList实现单选

    在.net中用CheckBoxList实现单选

    用CheckBoxList实现单选的原因是我觉得CheckBoxList控件页面展示效果要好看一些,需要的朋友可以参考下
    2014-02-02
  • 在.Net Framework应用中请求HTTP2站点的问题解析

    在.Net Framework应用中请求HTTP2站点的问题解析

    随着各大浏览器支持和苹果的带头效应,HTTP2的应用会越来越广泛,但是规模庞大的.NET Framework应用却也不能为了连接HTTP2就升级到NET Core平台。通过本文提供的方案,可以最小成本的实现.NET Framework应用成功访问HTTP2站点,感兴趣的朋友跟随小编一起看看吧
    2022-07-07
  • asp.net 上传或下载当文件名包含有特殊字符"#"的处理

    asp.net 上传或下载当文件名包含有特殊字符"#"的处理

    在上传或下载文件时,当文件名包含有"#"特殊字符时,上传以后的文件会被改名字,造成下载也下载不了。
    2010-03-03
  • asp.net删除文件session丢失

    asp.net删除文件session丢失

    如果你曾经修改了ASP.NET应用程序(dll文件),与修改了bin文件夹或Web.config文件(添加/删除/重命名的文件等),而该网站在运行,你可能已经注意到,这将导致在AppDomain的重新启动
    2010-09-09
  • ASP.NET MVC实现批量文件上传

    ASP.NET MVC实现批量文件上传

    这篇文章主要为大家详细介绍了ASP.NET MVC实现批量文件上传,简单介绍单文件上传的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • asp.net实现将ppt文档转换成pdf的方法

    asp.net实现将ppt文档转换成pdf的方法

    这篇文章主要介绍了asp.net实现将ppt文档转换成pdf的方法,通过自定义函数实现将pptx格式的文件转换成pdf格式文件的功能,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11

最新评论