上一篇谈到mvc中ef输出执行sql日志;来谈用mvc开发项目的调试和性能监控。EF框架自动给我生成sql语句,当我们的程序遇到性能问题的时候我们可以用MiniProfiler.EF来监控调试MVC和EF的性能,查看生成的sql语句、运行了哪些sql,以及所花的时间。MiniProfiler.EF,一个轻量级开源的mvc性能调试、监控组件MiniProfiler专门为EF定制的版本。下面通过一个具体一例子的说明怎么在我们的项目中用MiniProfiler.EF监控调试MVC和EF的性能。

1、安装

MiniProfiler

nuget搜索框中输入MiniProfiler,将出现下面结果:

点击安装将把MiniProfiler相关的dll加到项目中。

安装MiniProfiler.Mvc4,MiniProfiler.EF5(当然针对项目使用的EF版本;貌似只有EF4+之后的才可以使用)

2、添加配置相关代码到项目里面

1、在Global.asax加入MiniProfiler相关的监控代码

修改之后完整内容为:

using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using StackExchange.Profiling;
using StackExchange.Profiling.EntityFramework6;
namespace MiniProfilerDemo
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
MiniProfilerEF6.Initialize();
}
protected void Application_BeginRequest()
{
MiniProfiler.Start();
}
protected void Application_EndRequest()
{
MiniProfiler.Stop();
}
}
}

其中是在Application_Start加入了MiniProfilerEF.Initialize()和添加了Application_BeginRequest、Application_BeginRequest两个Application的事件函数,这个的作用分别是初始化MiniProfilerEF6和开始、结束MiniProfiler监控。

2、修改_Layout.cshtml视图文件

在Views\Shared\_Layout.cshtml文件的body前面加上一段代码,让监控展示在页面上。

  1. @StackExchange.Profiling.MiniProfiler.RenderIncludes()

如下图:

3、在Web.config加入代码

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

为了要在页面上显示MVC和EF的调试跟踪时间必须要加入上面的代码。如下图:

在system.webServer配置结点下的handlers结点,加入了一个名为MiniProfiler的handler。

3、查看运行结果

运行程序,查看页面如下图:

可以看到左角多了一个数字的区块,表示这个页面所花的毫秒数,点击上面的数字就可以弹出详细的时间跟踪信息,并且可以看到sql语句(显示为红色需要优化):

4、细微监控方法内部的时间

现在我们为ProductController加上监控,监控获取从数据库中获取Product记录所花的时间。我们把ProductController修改为:
using MiniProfilerDemo.DAL;
using System.linq;
using System.Web.Mvc;
using StackExchange.Profiling;
using System.Collections.Generic;
using MiniProfilerDemo.Models;
namespace MiniProfilerDemo.Controllers
{
public class ProductController : Controller
{
public ActionResult Index()
{
using (EFDbContext db = new EFDbContext())
{
var profiler = MiniProfiler.Current;
List<Product> m;
using (profiler.Step("获取Product列表"))
{
m = db.Products.ToList();
}
return View(m);
}
}
}
}

重新生成项目,再次运行查看页面,如下图:

可以看到上面多了我们刚才手动加的“获取Product列表”条记录。这样可以细微监控方法内部的时间,方便、快速地帮我们找出我们的程序的瓶颈所在。

最新文章

  1. jqGrid配置属性说明
  2. Dynamics AX 2012 R2 AIF No Endpoint Behavior Named 'clientEndpointBehavior'
  3. Apache配置文件服务器
  4. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
  5. Hash MD5 CRC 知识
  6. 【转】saiku与kylin整合备忘录
  7. hadoop学习记录(二)HDFS java api
  8. jQuery的on方法和bind绑定多个事件
  9. 【树莓PI】下载机
  10. vue.js源码精析
  11. 应用程序启动后修改自身EXE文件或自删除EXE文件(附VC++6.0源码)
  12. Linux实战教学笔记09:通配符
  13. redisson实现分布式锁原理
  14. 打印zigzag矩阵
  15. Caffe源码理解2:SyncedMemory CPU和GPU间的数据同步
  16. OMS自动化运维平台部署
  17. spring mvc 简单的文件上传与下载
  18. 消息 xxx,级别 16,状态 x,过程 sp_executesql,第 x 行 过程需要类型为 &#39;ntext/nchar/nvarchar&#39; 的参数 &#39;@statement&#39;。
  19. Coursera, Deep Learning 1, Neural Networks and Deep Learning - week1, Introduction to deep learning
  20. windows快速打开命令窗口方式[利刃篇]

热门文章

  1. Codeforces 583 DIV2 Asphalting Roads 模拟
  2. EOJ Monthly 2018.7
  3. MyEclipse导入外部项目
  4. Understanding Objective-C Blocks
  5. 报错:OpenCV Error: Assertion failed (src.size() == dst.size() &amp;&amp; src.type() == dst.ty pe()) in unknown function, file ..……
  6. hdu3591The trouble of Xiaoqian 多重背包+全然背包
  7. 从零开始搭建GitHub个人博客--第一步
  8. ios 开发keywordIBInspectable
  9. 解决apt 依赖破损的问题
  10. 楼梯跳跃代码web