采用MiniProfiler监控EF与.NET MVC项目
今天来说说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 => 1 == 1).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 => 1 == 1).ToList();
}
} using (profiler.Step("查询数据LogOperate的数据"))
{
using (StudentInfoEntities us = new StudentInfoEntities())
{
ViewBag.data = us.LogOperate.Where(a => 1 == 1).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项目的更多相关文章
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)(转)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- Miniprofiler 监控ef执行详解
首先NuGet添加 相对应ef版本的Miniprofiler.ef引用 web.config文件中添加 <system.webServer> <handlers> <a ...
- MiniProfiler工具介绍(监控EF生成的SQL语句)--EF,迷你监控器,哈哈哈
十年河东,十年河西,莫欺少年穷... 今天是抄袭的别人的博客,不过我感觉蛮好,挺有用,特别是老板让你优化EF项目SQL耗时的情况下,你可以采用这种方式来优化你的LINQ. 时间很宝贵,废话还是不多说, ...
- MiniProfiler性能监控分析工具在.NET项目中的使用
MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序.可以对一个页面本身,及该页面通过直接引用.Ajax.Iframe形式访问的其它页面进行监控 ...
- ASP.NET MVC5 使用MiniProfiler 监控MVC性能
MiniProfiler ,一个简单而有效的迷你剖析器,可以有效的实时监控页面.通过直接引用.Ajax.Iframe形式访问的其它页面进行监控,监控内容包括数据库内容,并可以显示数据库访问的SQL. ...
- 实例分析ASP.NET在MVC5中使用MiniProfiler监控MVC性能的方法
这篇文章主要为大家详细介绍了ASP.NET MVC5使用MiniProfiler监控MVC性能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 MiniProfiler ,一个简单而有效的迷你剖析器 ...
- 【MVC】ASP.NET MVC5 使用MiniProfiler 监控MVC性能
MiniProfiler ,一个简单而有效的迷你剖析器,可以有效的实时监控页面.通过直接引用.Ajax.Iframe形式访问的其它页面进行监控,监控内容包括数据库内容,并可以显示数据库访问的SQL. ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
随机推荐
- Java两种方式简单实现:爬取网页并且保存
注:如果代码中有冗余,错误或者不规范,欢迎指正. Java简单实现:爬取网页并且保存 对于网络,我一直处于好奇的态度.以前一直想着写个爬虫,但是一拖再拖,懒得实现,感觉这是一个很麻烦的事情,出现个小错 ...
- vs ComboBox显示多行
ComboBox,Drop List Type添加了多个数据,但是编译出来点下来按钮,只有一行. 惆怅 然后搜了下发现有人说: 在资源里面点向下箭头,把数据区拉长一点 然后才发现,原来资源里的Comb ...
- HBase 管理,性能调优
设置 Hadoop 来扩展磁盘 I/O 现代服务器通常有多个磁盘硬件来提供大存储能力.这些磁盘通常配置成 RAID 阵列,作为它们的出厂设置.这在很多情况下是有益的,但对 Hadoop 却不是. Ha ...
- OpenSUSE安装软件
zypper se xxxxx 是搜索软件包 zypper in xxxxx 跟你的apt-get install xxxx等价 zypper rm xxxx 删除 zypper up xxxx 更新 ...
- 关于emoji表情
/** /* 表情编码 /* @param emoji:表情符号 **/ encodeEmoji: function (content) { var imgHtml = ""; v ...
- go exec:exit status 64
接上一篇,找到了查看未读邮件个数方法,需要用go来执行doveadm命令,于是考虑使用go exec包 但是代码写好了之后一直报错:exit status 64,意思是选项错误,但是明明所有选项都是o ...
- signal.h中的宏定义SIG_DFL及SIG_IGN
SIG_DFL,SIG_IGN 分别表示无返回值的函数指针,指针值分别是0和1,这两个指针值逻辑上讲是实际程序中不可能出现的函数地址值.SIG_DFL:默认信号处理程序SIG_IGN:忽略信号的处理程 ...
- $.ajax使用总结(一):Form提交与Payload提交
http://blog.csdn.net/yiifaa/article/details/73468001 *********************************************** ...
- LeetCode: Validate Binary Search Tree 解题报告
Validate Binary Search Tree Given a binary tree, determine if it is a valid binary search tree (BST) ...
- LeetCode: Partition List 解题报告
Partition List Given a linked list and a value x, partition it such that all nodes less than x come ...