MiniProfiler工具介绍

    MiniProfiler是一款针对.NET,
Ruby, Go and Node.js的品质分析的轻量级程序。能够对1个页面自身,及该页面通过直接引用、Ajax、Iframe格局拜访的任何页面进行监督,监察和控制内容囊括数据库内容,并得以体现数据库访问的SQL(援救EF、EF
CodeFirst等 )。并且以很友好的法门呈今后页面上。

    MiniProfiler是一款针对.NET,
Ruby, Go and Node.js的性子分析的轻量级程序。可以对二个页面本人,及该页面通过直接引用、Ajax、Iframe方式拜访的其余页面实行督察,监察和控制内容包涵数据库内容,并能够显得数据库访问的SQL(支持EF、EF
CodeFirst等 )。并且以很要好的措施表现在页面上。

    MiniProfiler官网:http://miniprofiler.com/

    MiniProfiler官网:http://miniprofiler.com/

   
MiniProfiler的多个特意有效的法力是它与数据库框架的合龙。除了.NET原生的
DbConnection类,MiniProfiler还停放了对实业框架(Entity
Framework)以及LINQ to
SQL、RavenDb和MongoDB的协助。任何履行的Step都会席卷当时询问的次数和所消费的大运。为了检查和测试常见的荒谬,如N+1反形式,profiler将检查和测试仅有参数值存在差异的几个查询。

   
MiniProfiler的四个专程有效的效应是它与数据库框架的购并。除了.NET原生的
DbConnection类,MiniProfiler还内置了对实业框架(Entity
Framework)以及LINQ to
SQL、RavenDb和MongoDB的援助。任何履行的Step都会包涵当时询问的次数和所消费的小时。为了检查和测试常见的荒谬,如N+1反方式,profiler将检查和测试仅有参数值存在出入的五个查询。

    MiniProfiler是以Apache License V2.0研商揭橥的,你可以在NuGet找到。

    MiniProfiler是以Apache License V2.0共谋发布的,你能够在NuGet找到。

  过去径直选取Sqlserver
Profiler,不过发现实际上是太痛楚了,你不得不进行新建、过滤、清除、关闭等操作,而且过滤筛选往往相比为难控制。后来发觉MiniProfiler工具13分好用。

  过去直接利用Sqlserver
Profiler,不过发现实际是太难过了,你不得不进行新建、过滤、清除、关闭等操作,而且过滤筛选往往比较为难决定。后来察觉MiniProfiler工具10分好用。

 
同类监察和控制工具有NanoProfiler,下载地址:https://github.com/ef-labs/nanoprofiler/issues/1

 
同类监察和控制工具有NanoProfiler,下载地址:https://github.com/ef-labs/nanoprofiler/issues/1

Demo演示

德姆o开发环境

  • Win10
  • VS2013

准备工作

新建MVC项目WebAppEF,使用Northwind数据库。

1、先安装MiniProfiler

图片 1

2、安装MiniProfiler.MVC4

图片 2

3、安装MiniProfiler.EF

图片 3

4、修改Global.asax文件

本身那里只供给在支付环境使用SQL质量监察和控制,所以利用了#if
DEBUG,因为生产环境,我们一般是运用release方式。同时,MiniProfiler还扶助授权,那里不做牵线。

using StackExchange.Profiling;
using StackExchange.Profiling.EntityFramework6;
using System;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace WebAppEF
{
publicclassMvcApplication : System.Web.HttpApplication
    {
protectedvoid Application_Start()
        {
#if DEBUG
MiniProfilerEF6.Initialize();
#endif
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
protectedvoid Application_BeginRequest(Object source, EventArgs e)
        {
#if DEBUG
MiniProfiler.Start();
#endif
        }
protectedvoid Application_EndRequest()
        {
#if DEBUG
MiniProfiler.Stop();
#endif
        }
    }
}

伍 、在您的布局页(_Layout)中,比如以下这种结构,修改_Layout.cshtml

@using StackExchange.Profiling;
<head>
 ..
</head>
<body>
  ...
  @MiniProfiler.RenderIncludes()
</body>

6、修改配置文件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>

图片 4

7、添加控制器测试代码

        public ActionResult Index()
        {
            // create the entity object
            using (NorthwindEntities mobjentity = new NorthwindEntities())
            {
                ViewBag.SelectCustomer = mobjentity.Customers.Select(x => x.City == "Delhi").ToList();
            }

            var profiler = MiniProfiler.Current;
            using (profiler.Step("查询Customers的数据"))
            {
                using (NorthwindEntities entity = new NorthwindEntities())
                {
                    ViewBag.data = entity.Customers.ToList();
                }
            }
            return View();
        }

8、按F5调试运行

图片 5图片 6图片 7

说明:标记为duplicate的部分,代表在一次请求当中,重复执行了查询,可以进行优化。通过Step可以对独立的sql块进行标记。

Demo演示

德姆o开发环境

  • Win10
  • VS2013

准备干活

新建MVC项目WebAppEF,使用Northwind数据库。

1、先安装MiniProfiler

图片 8

2、安装MiniProfiler.MVC4

图片 9

3、安装MiniProfiler.EF

图片 10

4、修改Global.asax文件

自个儿那边只须求在支付环境使用SQL品质监察和控制,所以选拔了#if
DEBUG,因为生产环境,大家一般是应用release形式。同时,MiniProfiler还支持授权,这里不做牵线。

using StackExchange.Profiling;
using StackExchange.Profiling.EntityFramework6;
using System;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace WebAppEF
{
publicclassMvcApplication : System.Web.HttpApplication
    {
protectedvoid Application_Start()
        {
#if DEBUG
MiniProfilerEF6.Initialize();
#endif
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
protectedvoid Application_BeginRequest(Object source, EventArgs e)
        {
#if DEBUG
MiniProfiler.Start();
#endif
        }
protectedvoid Application_EndRequest()
        {
#if DEBUG
MiniProfiler.Stop();
#endif
        }
    }
}

⑤ 、在您的布局页(_Layout)中,比如以下那种布局,修改_Layout.cshtml

@using StackExchange.Profiling;
<head>
 ..
</head>
<body>
  ...
  @MiniProfiler.RenderIncludes()
</body>

6、修改配置文件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>

图片 11

7、添加控制器测试代码

        public ActionResult Index()
        {
            // create the entity object
            using (NorthwindEntities mobjentity = new NorthwindEntities())
            {
                ViewBag.SelectCustomer = mobjentity.Customers.Select(x => x.City == "Delhi").ToList();
            }

            var profiler = MiniProfiler.Current;
            using (profiler.Step("查询Customers的数据"))
            {
                using (NorthwindEntities entity = new NorthwindEntities())
                {
                    ViewBag.data = entity.Customers.ToList();
                }
            }
            return View();
        }

8、按F5调试运行

图片 12图片 13图片 14

说明:标记为duplicate的部分,代表在一次请求当中,重复执行了查询,可以进行优化。通过Step可以对独立的sql块进行标记。

广阔错误

广大错误

1、The Entity Framework was already using a DbConfiguration instance before an attempt was made to add an ‘Loaded’ event handler. ‘Loaded’ event handlers can only be added as part of application start up before the Entity Framework is used. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information.

图片 15

解析:错误提醒的疏忽是在盘算为DbConfiguration
实例加Loaded事件此前曾经在别的省方采取了那一个实例了

涸泽而渔方案:把MiniProfiler.EF6.Initialize()在位于Database.SetInitializer<WebAppEF.Models.NorthwindEntities>(null);
以前。

1、The Entity Framework was already using a DbConfiguration instance before an attempt was made to add an ‘Loaded’ event handler. ‘Loaded’ event handlers can only be added as part of application start up before the Entity Framework is used. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information.

图片 16

浅析:错误提醒的不经意是在准备为DbConfiguration
实例加Loaded事件从前已经在任哪个地点方选取了那么些实例了

消除方案:把MiniProfiler.EF6.Initialize()在置身Database.SetInitializer<WebAppEF.Models.诺思windEntities>(null);
此前。

2、Could not load file or assembly ‘MiniProfiler, Version=3.0.11.0, Culture=neutral, PublicKeyToken=b44f9351044011a3’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

图片 17

分析:找不到MiniProfiler程序集或然它的借助项。程序集定义和引用不合作。

消除方案:查看Web.config中是或不是留存如下配置节点

<dependentAssembly>
<assemblyIdentityname="MiniProfiler"publicKeyToken="b44f9351044011a3"culture="neutral" />
<bindingRedirectoldVersion="0.0.0.0-3.2.0.157"newVersion="3.2.0.157" />
</dependentAssembly>

假定不存在则拉长,假设存在,则检查MiniProfiler版本号和packages.config中的版本号是不是一律,假诺分裂就要对版本号实行改动。

参考:

行使MiniProfiler调试ASP.NET
MVC网站品质

使用MiniProfiler监察和控制EF与.NET MVC项目(Entity Framework
延伸类别1)

2、Could not load file or assembly ‘MiniProfiler, Version=3.0.11.0, Culture=neutral, PublicKeyToken=b44f9351044011a3’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

图片 18

解析:找不到MiniProfiler程序集可能它的重视项。程序集定义和引用不般配。

化解方案:查看Web.config中是不是留存如下配置节点

<dependentAssembly>
<assemblyIdentityname="MiniProfiler"publicKeyToken="b44f9351044011a3"culture="neutral" />
<bindingRedirectoldVersion="0.0.0.0-3.2.0.157"newVersion="3.2.0.157" />
</dependentAssembly>

假诺不设有则增进,就算存在,则检查MiniProfiler版本号和packages.config中的版本号是或不是同样,若是分化等就要对版本号实行修改。

参考:

应用MiniProfiler调节和测试ASP.NET
MVC网站质量

运用MiniProfiler监察和控制EF与.NET MVC项目(Entity Framework
延伸类别1)