• 采用MiniProfiler监控EF与.NET MVC项目


    1.引入MiniProfile(MiniProfiler.dll,MiniProfiler.EntityFramework.dll,MiniProfiler.Mvc.dll)

    2.Global.asax文件中加入两个方法:

    protected void Application_BeginRequest()
    {
        if (Request.IsLocal) //这里是允许本地访问启动监控,可不写
        {
            MiniProfiler.Start();
        }
    }
    
    protected void Application_EndRequest()
    {
        MiniProfiler.Stop();
    }

    在Application_Start方法中加入:

    MiniProfilerEF.Initialize();//监控到页面中EF所使用的SQL语句并进行分析.
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    
        MiniProfilerEF.Initialize();//监控到页面中EF所使用的SQL语句并进行分析.
    }

    3.然后找到你需要监控的页面,在页面中加入:

    @using StackExchange.Profiling;
    @MiniProfiler.RenderIncludes();
    当然,我们一般是想监控所有的页,所以我推荐加在你的布局页(_Layout)中,比如以下这种结构:
    <html>
    <head>
        @using StackExchange.Profiling;
    </head>
    <body>
            @RenderBody()
    
        @MiniProfiler.RenderIncludes();
    </body>
    </html>

    4.然后在配置文件Web.config中加入(注意,这里很重要):

    <system.webServer>
        <handlers>
          <add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
        </handlers>
    </system.webServer>

    5.这样,我们的基础监控就已经完成了,我们来看看效果.

    6.针对性监控(重要)

    当然,这只是简单的操作,我们在分析的过程中肯定会碰到诡异,或者后台代码更复杂的情况(比如一个页面10个查询),这个时候页面上的监控就会很混乱,不方便读,我们就需要进行针对性的监控.

    我们把刚刚的代码修改如下(这里我们进行两次查询操作,用MiniProfiler进行分类):

    public class HomeController : Controller
        {
            public ActionResult Index()
            {
                var profiler = MiniProfiler.Current;
                using (profiler.Step("查询数据LogData的数据"))
                {
                    using (StudentInfoEntities us = new StudentInfoEntities())
                    {
                        ViewBag.data = us.LogData.Where(a => 1 == 1).ToList();
                    }
                }
    
                using (profiler.Step("查询数据LogOperate的数据"))
                {
                    using (StudentInfoEntities us = new StudentInfoEntities())
                    {
                        ViewBag.data = us.LogOperate.Where(a => 1 == 1).ToList();
                    }
                }
                return View();
            }
    }

    得到监控效果如上面的图

    7.监控的权限(给管理员分配监控的权限)

    在实际的项目开发中,我们不可能对所有的用户全部开放监控的权限,所以我们要对他进行显示的控制.

    在MiniProfiler中,提供了两个委托,如下:

     MiniProfiler.Settings.Results_Authorize //配置监控的权限

    MiniProfiler.Settings.Results_List_Authorize //配置历史信息监控的权限(在~/mini-profiler-resources/results-index中可以查看最近100次的请求分析)

    这里我们简单的做一下权限控制,

    我们在Global.asax文件中添加代码如下:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        #region 权限控制
    
        MiniProfiler.Settings.Results_Authorize = Request =>
        {
            string name = Request.Cookies["name"] == null ? "" : Request.Cookies["name"].Value;
            if (name.Equals("admin")) return true;
            else return false;
        };//配置监控的权限
    
        #endregion
        MiniProfilerEF.Initialize();//监控到页面中EF所使用的SQL语句并进行分析.
    }

    这样就只有cookie的name属性为admin的用户才能有监控显示了

    效果如下(我们可以看到,当cookie中的name等于admin的时候才会有监控的显示):





  • 相关阅读:
    js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结
    Java两大测试方法Junit和TestNG的比较
    java简单的测试方法执行了多少时间
    利用Chrome的Performance工具排查页面性能问题(原叫timeline)
    P3317 [SDOI2014]重建(Matrix-tree+期望)
    P2221 [HAOI2012]高速公路(线段树)
    P2473 [SCOI2008]奖励关(期望)
    P3302 [SDOI2013]森林(主席树+启发式合并)
    bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)
    P2219 [HAOI2007]修筑绿化带(单调队列)
  • 原文地址:https://www.cnblogs.com/genesis/p/6371145.html
Copyright © 2020-2023  润新知