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

今天来说说EF与MVC项目的性能检测和监控,相对本篇文章,更推荐大家使用另一个类似组件 NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇

首先,先介绍一下今天我们使用的工具吧.

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> 

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

 

第二章:监控EF,并对某次操作进行针对性监控

首先我们在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;                elsereturn false;};StackExchange.Profiling.EntityFramework6.MiniProfilerEF6.Initialize();}

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

 

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

 

写在最后

至此,文章就全部结束了,欢迎各位大神拍砖.

原文地址:http://www.cnblogs.com/GuZhenYin/p/5408632.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)公钥,私钥和数字签名这样最好理解

转自&#xff1a; 公钥&#xff0c;私钥和数字签名这样最好理解_21aspnet的博客-CSDN博客_公钥签名还是私钥签名一、公钥加密 假设一下&#xff0c;我找了两个数字&#xff0c;一个是1&#xff0c;一个是2。我喜欢2这个数字&#xff0c;就保留起来&#xff0c;不告诉你们(私钥…

JavaWeb的web.xml标签元素(二)

JavaWeb的web.xml标签元素&#xff08;一&#xff09; 九、session-config为Web应用中的javax.servlet.http.HttpSession对象定义参数 session-config-session-timeout?session-timeout元素用来指定默认的会话超时时间间隔&#xff0c;以分钟为单位。该元素值必须为整数。如果…

登录系统 提示框_实物资产管理软件操作手册(职员和系统用户)

一、职员和系统用户“职员和系统用户”菜单提供了对公司人员信息进行维护的功能&#xff0c;可以自定义职员编码、 姓名、用户名等相关职员信息。注意&#xff1a;职员编码、用户名需唯一&#xff0c;且用户名一旦保存则不可修改。根据要求可以将“用户类型”分为“职员”和“系…

HoloLens开发手记-凝视 Gaze

凝视 Gaze 在全息应用中&#xff0c;凝视是第一种输入形式&#xff0c;被用于定位物体&#xff08;功能和PC的光标指针类似&#xff09;。凝视告诉你用户正在看向世界中的位置&#xff0c;让你能够确定他们的意图。在现实世界中&#xff0c;你通常会盯着你打算与之交互的物体。…

摘要算法与加密(以MD5算法为例)

【README】 部分内容总结自&#xff1a; 摘要与加密的区别&#xff08;以MD5算法为例&#xff09; - 掘金https://juejin.cn/post/6844903561478799368 【1】摘要算法与加密区别 【1.1】摘要算法&#xff08;不可逆&#xff09; 1&#xff09;摘要算法&#xff1a; 说白了…

Oracle入门(三A)之sqlplus

转载自 sqlplus /nolog是什么意思sqlplus命令格式如下&#xff1a; 用法: SQLPLUS [ [<option>] [<logon>] [<start>] ] 其中 <option> :: -H | -V | [ [-M <o>] [-R <n>] [-S] ] <登录> :: <用户名>[/<口令>][<con…

.Net Core下如何管理配置文件

一、前言 根据该issues来看&#xff0c;System.Configuration在.net core中已经不存在了&#xff0c;那么取而代之的是由Microsoft.Extensions.Cnfiguration.XXX一系列的类库提供&#xff0c;对应的开源地址为点击这里。 从当前开源的代码来看&#xff0c;在.net core下提供了…

python短视频自动制作_Python 带你一键生成朋友圈超火的九宫格短视频

1. 场景如果你经常刷抖音和微信朋友圈&#xff0c;一定发现了最近九宫格短视频很火&#xff01;​从朋友圈九宫格图片&#xff0c;到九宫格视频&#xff0c;相比传统的图片视频&#xff0c;前者似乎更有个性和逼格除了传统的剪辑软件可以实现&#xff0c;是否有其他更加快捷方便…

3-系统总线

【README】 1.本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 2.补充&#xff1a;冯洛伊曼计算机由5大部分组成&#xff1a; 1. 运算器2. 控制器3. 存储器4. 输入设备5. …

HashMap中傻傻分不清楚的那些概念

转载自 HashMap中傻傻分不清楚的那些概念 很多人在通过阅读源码的方式学习Java&#xff0c;这是个很好的方式。而JDK的源码自然是首选。在JDK的众多类中&#xff0c;我觉得HashMap及其相关的类是设计的比较好的。很多人读过HashMap的代码&#xff0c;不知道你们有没有和我一样&…

HoloLens开发手记-硬件细节 Hardware Detail

微软HoloLens是世界第一款完全无线缆的全息计算机。通过在新方式上赋予用户的全息体验&#xff0c;HoloLens重新定义了个人计算&#xff08;Personal Computing&#xff09;。为了将3D全息图形固定到你周围的真实世界中&#xff0c;HoloLens融合了最先进的光学元件和传感器。 设…

super构造方法为什么给子类赋值_【Java学习 | Javase】super

整理自&#xff1a;动力节点基础讲义super概述 严格来说&#xff0c;super其实并不是一个引用&#xff0c;它只是一个关键字&#xff0c;super代表了当前对象中从父类继承过来的那部分特征。换句话说&#xff0c;super其实是this的一部分&#xff0c;从父类继承过来的属性和方法…

4-存储器

【README】 1.本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1】概述 【1.1】存储器分类 1&#xff09;按存储介质分类 1&#xff0c; 半导体存储器&#xff0c;分为 TTL&#…

坑爹的日志无法按天切割问题

转载自 坑爹的日志无法按天切割问题问题背景 线上某个新管理型系统出现了日志无法按天切割生成日志文件的问题&#xff0c;所有的日志都在一个日志文件里面&#xff0c;只有每次重启的时候才会重新生成文件。 这个管理系统使用的是 Spring Boot Logback 框架&#xff0c;查看了…

Asp.net 面向接口框架之应用程序上下文作用域组件

在团队中推广面向接口开发两年左右,成果总体来说我还是挺满意的,使用面向接口开发的模块使用Unity容器配置的功能非常稳定,便于共享迁移(另一个项目使用只需要复制配置和调用接口即可)也很好扩展(操作的数据库、表、资源等都可以配置)。 但是由于当时开发的匆忙(边开发边应用),…

投票源码程序_[内附完整源码和文档] 基于JSP实现的影视创作论坛系统

摘 要随着时代的发展&#xff0c;互联网的出现&#xff0c;给传统影视行业带来的最大便利就是&#xff0c;方便了影视从业人员以及爱好者的交流和互动&#xff0c;而为用户提供一个书写影评&#xff0c;阅读影评以及回复影评的平台&#xff0c;以影评为载体来使用户感受影评、解…

5-输入输出系统IO

【README】 1.本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1】 IO概述 【1.1】输入输出系统的发展概况 通道&#xff08;通道是netty的io多路复用的底层原理&#xff0c;需要重点了…

Java中的基本数据类型转换(自动、强制、提升)

转载自 Java中的基本数据类型转换&#xff08;自动、强制、提升&#xff09; 说基本数据类型转换之前&#xff0c;先了解下 Java 中的 8 种基本数据类型&#xff0c;以及它们的占内存的容量大小和表示的范围&#xff0c;如下图所示。 重新温故了下原始数据类型&#xff0c;现在…

我是这样入侵 Hacking Team 的

在意大利间谍软件厂商 Hacking Team 的内部邮件和文档被曝光将近一年后&#xff0c;黑掉这家黑客公司的黑客公开了他如何入侵HT的完整细节。该文档于上周六在网上发布&#xff0c;本意是为了给黑客活动人士的一份指南。但对于安全从业人员来说&#xff0c;则意味着当任何企业或…

python 数据分析 书籍推荐 知乎_Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书!...

原标题&#xff1a;Python 爬取知乎 9674 个问答&#xff0c;揭秘最受欢迎的 98 本书&#xff01;作者 | Yura责编 | 胡巍巍高尔基这话有没有道理我不知道&#xff0c;咱也不敢问&#xff0c;主要是现在也问不了。那对我来说&#xff0c;读书有什么意义呢&#xff1f;应该也是阶…