采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
今天来说说EF与MVC项目的性能检测和监控
首先,先介绍一下今天我们使用的工具吧.
MiniProfiler~
这个东西的介绍如下:
MVC MiniProfiler是Stack Overflow团队设计的一款对ASP.NET MVC的性能分析的小程序。可以对一个页面本身,及该页面通过直接引用、Ajax、Iframe形式访问的其它页面进行监控,监控内容包括数据库内容,并可以显示数据库访问的SQL(支持EF、EF CodeFirst等 )。并且以很友好的方式展现在页面上。
该Profiler的一个特别有用的功能是它与数据库框架的集成。除了.NET原生的 DbConnection类,profiler还内置了对实体框架(Entity Framework)以及LINQ to SQL的支持。任何执行的Step都会包括当时查询的次数和所花费的时间。为了检测常见的错误,如N+1反模式,profiler将检测仅有参数值存在差 异的多个查询。
MiniProfiler是以Apache License V2.0协议发布的,你可以在NuGet找到。配置及使用可以看这里:http://code.google.com/p/mvc-mini-profiler
为建立快速的网站黄金参考标准,雅虎2007年为网站提高速度的13个简易规则。
以上这一段是照抄的张善友的博客,原文地址:http://www.cnblogs.com/shanyou/archive/2012/04/03/2430977.html
当然 国内百度也能百度出一大把的教程,但是教程都比较老与现在的新版本还是差距很大,而且博文中讲的并不是很详细,所以本屌就来详细的讲讲吧..
系统:WIN7
数据库:SQL Server2008
相关技术:MVC5+EF6.1.3
首先,明确一下本博文的目标,监控EF的Sql和执行时间,监控MVC页面的执行时间
那么我们开始.
第一步,从NuGet上下载所需要的包,下载内容如图:
MiniProfiler核心(所有的MiniProfiler相关资源都需要先有他)

这里需要注意,新版本的MiniProfiler.EF是需要根据你的EF版本来下载的,分为MiniProfiler.EF6,MiniProfiler.EF5,MiniProfiler.EF(EF4以下)三个版本
根据你的EF版本自行下载对应的包.

MiniProfiler.MVC4(注:这里的MVC4是可以分析MVC4,5两个版本的,使用MVC3的同学请自行下载MiniProfiler.MVC3)

至此,我们所需要安装的程序包就全部OK了,
下面我们开始监控:
首先,给你的Global.asax文件中加入:
protected void Application_BeginRequest()
{
if (Request.IsLocal)//这里是允许本地访问启动监控,可不写
{
MiniProfiler.Start(); }
} protected void Application_EndRequest()
{
MiniProfiler.Stop();
}
然后找到你需要监控的页面,在页面中加入:
@using StackExchange.Profiling;
@MiniProfiler.RenderIncludes();
当然,我们一般是想监控所有的页,所以我推荐加在你的布局页(_Layout)中,比如以下这种结构:
<html>
<head>
@using StackExchange.Profiling;
</head>
<body>
@RenderBody() @MiniProfiler.RenderIncludes();
</body>
</html>
然后在配置文件中加入(注意,这里很重要):
<system.webServer>
<handlers>
<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
</handlers>
</system.webServer>
这样,我们的基础监控就已经完成了,我们来看看效果.

首先我们在Global.asax文件中添加代码如下:
protected void Application_Start()
{
.... StackExchange.Profiling.EntityFramework6.MiniProfilerEF6.Initialize();
....
}
因为这是一个简单的demo,所以我们随意找一个Controller,写一些EF的查询,代码如下:
public class HomeController : Controller
{
public ActionResult Index()
{ using (StudentInfoEntities us = new StudentInfoEntities())
{
ViewBag.data = us.LogData.Where(a => == ).ToList();
} return View();
}
}
我们来看看效果.

可以看出来,这次查询用了56.2MS,占用整个页面的加载时间71%的比例.,点击蓝色的56.2可以看到详细的SQL语句,如下:

这样,我们就可以随时监控到页面中EF所使用的SQL语句并进行分析.
针对性监控(重要)
当然,这只是简单的操作,我们在分析的过程中肯定会碰到诡异,或者后台代码更复杂的情况(比如一个页面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 => == ).ToList();
}
} using (profiler.Step("查询数据LogOperate的数据"))
{
using (StudentInfoEntities us = new StudentInfoEntities())
{
ViewBag.data = us.LogOperate.Where(a => == ).ToList();
}
}
return View();
}
}
得到监控效果如下:


这样,我们就可以根据我们的需要来详细的跟踪某一次EF操作的结果了.
在实际的项目开发中,我们不可能对所有的用户全部开放监控的权限,所以我们要对他进行显示的控制.
在MiniProfiler中,提供了两个委托,如下:
MiniProfiler.Settings.Results_Authorize //配置监控的权限
MiniProfiler.Settings.Results_List_Authorize //配置历史信息监控的权限(在~/mini-profiler-resources/results-index中可以查看最近100次的请求分析)
这里我们简单的做一下权限控制,
我们在Global.asax文件中添加代码如下:
protected void Application_Start()
{
....
MiniProfiler.Settings.Results_Authorize = Request =>
{
string name = Request.Cookies["name"] == null ? "" : Request.Cookies["name"].Value;
if (name.Equals("admin"))
return true;
else
return false;
}; StackExchange.Profiling.EntityFramework6.MiniProfilerEF6.Initialize(); }
这样就只有cookie的name属性为admin的用户才能有监控显示了
效果如下(我们可以看到,当cookie中的name等于admin的时候才会有监控的显示):


至此,文章就全部结束了,欢迎各位大神拍砖.
采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)的更多相关文章
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)(转)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 采用MiniProfiler监控EF与.NET MVC项目
今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC MiniProfiler是Stack Overflow团队 ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- 使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)
在学习python开发框架pylons/pyramid的过程中,里面有个非常棒的页面性能监控功能,这样在开发过程中,你能清楚的知道当前页面的性能以及其它参数. 这里介绍一下如何给Asp.net MVC ...
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点
在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...
- ASP.NET MVC+EasyUI+Entity FrameWork 整合开发
本文详细讲解怎么用ASP.NET MVC+EasyUI+Entity FrameWork 来开发一个项目 对于ASP.NET MVC的Jscript库,主要引用 <script type=.mi ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之目录导航
ASP.NET MVC with Entity Framework and CSS是2016年出版的一本比较新的.关于ASP.NET MVC.EF以及CSS技术的图书,我将尝试着翻译本书以供日后查阅. ...
- Using the Repository Pattern with ASP.NET MVC and Entity Framework
原文:http://www.codeguru.com/csharp/.net/net_asp/mvc/using-the-repository-pattern-with-asp.net-mvc-and ...
随机推荐
- Apache Ignite高性能分布式网格框架-初探
Apache Ignite初步认识 今年4月开始倒腾openfire,过程中经历了许多,更学到了许多.特别是在集群方面有了很多的认识,真正开始认识到集群的概念及应用方法. 在openfire中使用的集 ...
- Spark RDD 核心总结
摘要: 1.RDD的五大属性 1.1 partitions(分区) 1.2 partitioner(分区方法) 1.3 dependencies(依赖关系) 1.4 compute(获取分区迭代列表) ...
- ASP.NET Core应用针对静态文件请求的处理[4]: DirectoryBrowserMiddleware中间件如何呈现目录结构
和StaticFileMiddleware中间件一样,DirectoryBrowserMiddleware中间本质上还是定义了一个请求地址与某个物理目录之间的映射关系,而目标目录体现为一个FilePr ...
- Spring resource bundle多语言,单引号format异常
Spring resource bundle多语言,单引号format异常 前言 十一假期被通知出现大bug,然后发现是多语言翻译问题.法语中有很多单引号,单引号在format的时候出现无法匹配问题. ...
- php 基础代码大全(不断完善中)
下面是基础的PHP的代码,不断完善中~ //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线 ...
- mac好用的markdown编辑器
在刚开始接触markdown的时候,就被吸引了.此后一直在找贴心的好用的markdown编辑器.印象笔记和马克飞象配合着用也是挺好的,唯一的缺点就是比较封闭,发个笔记的链接给同学,还得注册才能看,导致 ...
- HTML5 程序设计 - 使用HTML5 Canvas API
请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...
- MSSQL 事务,视图,索引,存储过程,触发器
事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据 ...
- Oracle中的commit详解
本文转自 : http://blog.csdn.net/hzhsan/article/details/9719307 它执行的时候,你不会有什么感觉.commit在数据库编程的时候很常用,当你执行DM ...
- jQuery 的选择器常用的元素查找方法
jQuery 的选择器常用的元素查找方法 基本选择器: $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myE ...