iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NET Core使用MiniProfiler分析应用
  • 719
分享到

ASP.NET Core使用MiniProfiler分析应用

2024-04-02 19:04:59 719人浏览 八月长安
摘要

MiniProfiler(https://miniprofiler.com/)是一个轻量级且简单易用的分析工具库,它可以用来分析ASP.net core应用。 优点 针对ASP.ne

MiniProfiler(https://miniprofiler.com/)是一个轻量级且简单易用的分析工具库,它可以用来分析ASP.net core应用。

优点

针对ASP.net core mvc应用,使用MiniProfiler的优点是:它会把结果直接放在页面的左下角,随时可以点击查看;这样的话就可以感知出你的程序运行的怎么样;同时这也意味着,在你开发新功能的同时,可以很快速的得到反馈。

一、安装配置MiniProfiler

在现有的ASP.Net Core MVC项目里,通过Nuget安装MiniProfiler :

Install-Package MiniProfiler.Aspnetcore.Mvc

当然也可以通过Nuget Package Manager可视化工具安装

接下来配置MiniProfiler,总共分三步:

第一步,来到Startup.csConfigureServices方法里,添加services.AddMiniProfiler();

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });


        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        // 当然这个方法还可以添加一个lambda表达式作为参数,从而做一些自定义的配置:
        services.AddMiniProfiler(options =>
        {
            // 设定弹出窗口的位置是左下角
            options.PopupRenderPosition = RenderPosition.BottomLeft;
            // 设定在弹出的明细窗口里会显式Time With Children这列
            options.PopupShowTimeWithChildren = true;
        });
    }

第二步,来到来到Startup.csConfigure方法里,添加app.UseMiniProfiler();

    // This method gets called by the runtime. Use this method to configure the Http request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ...

        // 最重要的一点是就是配置中间件在管道中的位置,一定要把它放在UseMvc()方法之前。 
        app.UseMiniProfiler();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

第三步,将MiniProfilerTag Helper放到页面上

  • _ViewImports 页面引入 MiniProfiler 的 Tag Helper :
    ...

    @using StackExchange.Profiling

    ...
    @addTagHelper *, MiniProfiler.AspNetCore.Mvc
  • 将 MiniProfiler 的Tag Helper 放入 _Layout.cshtml 中:
    ...

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2019 - MiniProfilerCoreDemo - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
        </div>
    </footer>

    @* 其实放在页面的任意地方都应该可以,但是由于它会加载一些脚本文件,所以建议放在footer下面: *@@* 其实放在页面的任意地方都应该可以,但是由于它会加载一些脚本文件,所以建议放在footer下面: *@
    <mini-profiler />

    <environment include="Development">
        <script src="~/lib/Jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    </environment>

    ...

    @RenderSection("Scripts", required: false)
</body>
</html>

运行应用,可以看到左下角就是MiniProfiler:

点击它之后会弹出窗口,里面有每个步骤具体的耗用时间。

二、MiniProfiler 具体使用

分析局部代码

前面的例子里,我们使用MiniProfiler分析了页面整个流程的时间。而MiniProfiler也可以用来分析一段代码所耗用的时间。看例子:

    public async Task<IActionResult> Index()
    {
#if !DEBUG
        // 这里我们使用了using语句,里面使用了 MiniProfiler 类的 Current 属性,在该属性上面有一个Step()方法,
        // 它可以用来分析using语句里面的代码,在Step方法里,要提供一个具有描述性的名称来表示该段代码做的是什么动作,这个名称会显示在结果里。
        using (MiniProfiler.Current.Step("计算第一步"))
        {
            var users = await _context.Users.ToListAsync();
            return View(users);
        }
#else
        // 通常,我会使用 using 语句块来嵌套着使用

        using(MiniProfiler.Current.Step("第1步"))
        {

            // ... 相关操作
            Thread.Sleep(30);

            using(MiniProfiler.Current.Step("第1.1步"))
            {
                // ... 相关操作
                Thread.Sleep(30);
            }

            using(MiniProfiler.Current.Step("第1.2步"))
            {
                // ... 相关操作
                Thread.Sleep(30);
            }
       }

        // 但是如果你只想分析一句话,那么使用using语句就显得太麻烦了,这种情况下可以使用 Inline() 方法:
        var users = await MiniProfiler.Current.Inline(async () => await _context.Users.ToListAsync(), "计算第一步");
        return View(users);
#endif
    }
  • 使用 using 语句块嵌套结果展示:

  • 使用 Inline() 方法结果展示:

自定义分析 CustomTiming

有时候,分析一些例如请求外部动作的时候,上面讲的做法可能不太灵光,这里我们就可以使用CustomTime()方法

    public async Task<IActionResult> Privacy()
    {
        // 这个例子里,我们使用 MiniProfiler.Current.CustomTiming() 方法。
        //  第一个参数是一个用于分类的字符串,这里我用的是http请求,所以写了http;
        //  第二个参数是命令字符串,这里我用不上,暂时留空;
        //  第三个参数是执行类型,这里我用的是Get请求,所以写了GET;
        using (CustomTiming timing = MiniProfiler.Current.CustomTiming("http", string.Empty, "GET"))
        {
            var url = "http://27.24.159.155";
            var httpClient = new HttpClient
            {
                BaseAddress = new Uri(url)
            };
            httpClient.DefaultRequestHeaders.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/JSON"));

            var response = await httpClient.GetAsync("/system/resource/code/news/click/dynclicks.jsp?clickid=1478&owner=1220352265&clicktype=wbnews");

            timing.CommandString = $"URL:{url}\n\r Response Code:{response.StatusCode}";

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception("Error fetching data from api");
            }

            var clickTimes = await response.Content.ReadAsStringAsync();

            ViewData["clickTimes"] = clickTimes;
        }

        return View();
    }
  • 运行程序,可以看到窗口的右侧出现了http这一列:

  • 点击 http 所在列的153.1 (1),这就是使用CustomTiming分析的那段代码,它请求的URL和返回码都显示了出来。

三、案例源码

MiniProfilerCoreDemo

到此这篇关于asp.net Core使用MiniProfiler分析应用的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: ASP.NET Core使用MiniProfiler分析应用

本文链接: https://www.lsjlt.com/news/139465.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core使用MiniProfiler分析应用
    MiniProfiler(https://miniprofiler.com/)是一个轻量级且简单易用的分析工具库,它可以用来分析ASP.NET Core应用。 优点 针对ASP.NE...
    99+
    2022-11-13
  • ASP.NETCore在WebApi项目中使用MiniProfiler分析EntityFrameworkCore
    安装配置MiniProfiler 在现有的ASP.NET Core MVC WebApi 项目里,通过Nuget安装MiniProfiler: Install-Package Min...
    99+
    2022-11-13
  • Linux系统Docker 部署 ASP.NET Core应用的流程分析
    目录一、系统环境二、操作流程及途中遇到的问题一、系统环境 1、腾讯云轻量应用服务器CentOS7.6 二、操作流程及途中遇到的问题 1、SSH方式远程Linux ssh <u...
    99+
    2022-11-12
  • 在ASP.Net Core应用程序中使用Bootstrap4
    笔者的前端文件如下 笔者增加Bootstrap 4 和 FontAwersome(字体图标),因为Bootsrap 4已经不再包含图标了。 ASp.Net Core 中,通常在&n...
    99+
    2022-11-12
  • 使用Supervisor守护ASP.NET Core应用程序进程
    目录一、前言二、Supervisor1、安装Python包管理工具2、安装Supervisor3、配置Supervisor应用守护4、配置Supervisor开机启动三、总结一、前言...
    99+
    2022-11-13
  • Linux上使用Docker部署ASP.NET Core应用程序
    一、创建 1、创建应用程序 使用ASP.NET Core创建一个MVC应用程序,并修改Home控制器Index视图代码: @{ ViewData["Title"] = "Ho...
    99+
    2022-11-13
  • 如何在ASP.Net Core应用程序中使用Bootstrap4
    本篇内容介绍了“如何在ASP.Net Core应用程序中使用Bootstrap4”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!笔者...
    99+
    2023-06-26
  • ASP.NET Core使用AutoMapper组件
    1.什么是AutoMapper? AutoMapper是一个对象-对象映射器。对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作。使AutoMapper变得有趣的...
    99+
    2022-11-13
  • ASP.NET Core中使用滑动窗口限流的问题举例分析
    本篇内容主要讲解“ASP.NET Core中使用滑动窗口限流的问题举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET Core中使用滑动窗口限流的问题举例分...
    99+
    2023-06-22
  • ASP.NET Core在Task中使用IServiceProvider的问题解析
    目录前言问题演示解决问题问题探究请求中的IServiceProvider请求中的IServiceProvider和IServiceScopeFactory后续插曲总结前言 问题的起因...
    99+
    2022-11-13
    ASP.NET Core使用IServiceProvider ASP.NET Core Task使用IServiceProvider
  • ASP.NET Core中使用滑动窗口限流的问题及场景分析
    目录算法原理漏检太刚算法实现进程内即内存滑动窗口算法基于Redis的滑动窗口算法应用算法1、安装Nuget包2、使用中间件滑动窗口算法用于应对请求在时间周期中分布不均匀的情况,能够更...
    99+
    2022-11-12
  • ASP.NET Core管理应用程序状态
    在ASP.NET Core中,由多种途径可以对应用程序状态进行管理,使用哪种途径,由检索状态的时机和方式决定。 应用程序状态指的是用于描述当前状况的任意数据。包括全局和用户特有的数据...
    99+
    2022-11-13
  • ASP.NET Core 中FromServices如何使用
    本篇文章给大家分享的是有关 ASP.NET Core 中FromServices如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。构造函数...
    99+
    2022-10-19
  • ASP.NET Core使用Swagger/OpenAPI规范
    目录1.什么是Swagger/OpenAPI?2.NET Swagger实现3.Swashbuckle主要组成部分4.什么是REST5.配置Swagger中间件6.XML注释7.数据...
    99+
    2022-11-13
  • 如何使用Supervisor守护ASP.NET Core应用程序进程
    本文小编为大家详细介绍“如何使用Supervisor守护ASP.NET Core应用程序进程”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用Supervisor守护ASP.NET Core应用程序进程”文章能帮助...
    99+
    2023-06-29
  • Linux上如何使用Docker部署ASP.NET Core应用程序
    这篇文章将为大家详细讲解有关Linux上如何使用Docker部署ASP.NET Core应用程序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、创建1、创建应用程序使用ASP.NET Core...
    99+
    2023-06-29
  • ASP.NET Core如何使用HttpClient调用WebService
    本文小编为大家详细介绍“ASP.NET Core如何使用HttpClient调用WebService”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.NET Core如何使用HttpClient调用WebServi...
    99+
    2023-06-29
  • 解析ASP.NET Core中Options模式的使用及其源码
    目录1、Options模式的用法2、Options模式源码解析3、最佳实践本章将和大家分享ASP.NET Core中Options模式的使用及其源码解析。 在ASP.NET Core...
    99+
    2022-11-13
  • 怎么在Docker中部署 ASP.NET Core应用
    本篇文章为大家展示了怎么在Docker中部署 ASP.NET Core应用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、系统环境腾讯云轻量应用服务器CentOS7.6二、操作流程及途中遇到的问题...
    99+
    2023-06-15
  • ASP.NET Core 集成 React SPA应用的步骤
    目录wwwroot\uiReactUIMiddleware运行一下总结AgileConfig的UI使用react重写快完成了。上次搞定了基于jwt的登录模式(AntDesign Pr...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作