使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

时间:2023-01-08 23:26:35

在学习python开发框架pylons/pyramid的过程中,里面有个非常棒的页面性能监控功能,这样在开发过程中,你能清楚的知道当前页面的性能以及其它参数。

这里介绍一下如何给Asp.net MVC和Entity Framework也添加上性能监控,让你在开发过程中随时掌握当前程序运行的信息。

这里是在Autofac+MVC+EF篇的源码基础上,一步一步的介绍添加Profiler的过程。

如果有兴趣了解Autofac的应用,可以看这里 IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)

最终源代码在这里 MiniProfiler.zip

阅读目录:

一、MiniProfiler应用的结果

二、下载源码,运行程序

三、添加MVC Profiler

四、添加Entity Framework Profiler

五、总结

一,MiniProfiler应用的结果

先看看应用了MiniProfiler的结果

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

二,下载源码,运行程序

1. 下载源代码

源代码的下载地址是 AutofacMVC.zip

2. 使用Nuget下载依赖

源代码使用了Nuget的包管理,可以非常方便的下载外部引用。Nuget的使用,可以看这里Nuget如何自动下载依赖DLL引用

3. 创建数据库

修改web.config中的数据库链接字符串,并创建对应的数据库School, 然后使用EF的Migration创建表结构和初始化数据

在"Package Manager Console”中输入”Update-Database”命令。

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

如果在运行命令的过程中出现了错误:

Package Manager Console Update-Database CommandNotFoundException only in a specific VS project

那么在执行Update-Database命令之前,先运行

Install-Package EntityFramework –IncludePrerelease

4. 最后运行程序,页面如下:

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

三, 添加MVC Profiler

1. 通过Nuget添加MiniProfiler引用

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

2. 在_Layout.cshmlt中添加MiniProfiler

在_Layout.cshtml中添加的MiniProfiler的相关代码,这样就能在每个页面上输出页面的访问信息

由于MiniProfiler生成的js需要依赖于Jquery,所以记得添加对于Jquery的引用。

@using StackExchange.Profiling
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
<script type="text/javascript" src="~/Scripts/jquery-2.0.3.min.js"></script>
</head>
<body>
@RenderBody()
@MiniProfiler.RenderIncludes()
</body>
</html>

3. 添加MiniProfiler的Handler

上面@MiniProfiler.RenderIncludes()会在页面上生成一段js

类似于

 <script async type="text/javascript" id="mini-profiler" src="/mini-profiler-resources/includes.js?v=xwYPDDH1blvqmxgsBweNC++H7CFU3KGQ+zFcVlJPsXw=" ……
 
我们的系统中,应当添加Handler来处理对于上面的include.js的处理,把它交给MiniProfiler的dll来处理这个js的请求。
<handlers>
<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
</handers>
 

4. 在Global.asax中启动MiniProfiler记录

如下, 在每个request开始和结束的时候,调用MiniProfiler来记录信息。
protected void Application_BeginRequest()
{
if (Request.IsLocal)
{
MiniProfiler.Start();
}
} protected void Application_EndRequest()
{
MiniProfiler.Stop();
}

5. 完成所有的工作后,重新刷新页面

重新启动,刷新页面,就能看到MiniProfiler记录的结果了。

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

四, 添加Entity Framework Profiler

1, 从Nuget中添加MiniProfiler.EF

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

2. 在Global.asax中,添加代码

protected void Application_Start()
{
MiniProfilerEF.Initialize();
………
}

3. 刷新页面

刷新的页面,能够发现MiniProfiler问我们记录了EF访问数据的信息

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

五,总结

MiniProfiler是平时开发的利器,以可视化的方式让你随时监控开发过程中的性能问题。

MiniProfiler提供了不只是提供了MVC和EF扩展,还有针对windows开发,WCF, NHibernate等.

MiniProfiler应该作为项目开发中的一个标配,如果你的项目中,还没有使用到,赶快试一试,它一定能够为你的开发带来意向不到的正能量。

使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)的更多相关文章

  1. Asp&period;net MVC - 使用PRG模式(附源码)

    阅读目录: 一. 传统的Asp.net页面问题 二.Asp.net MVC中也存在同样的问题 三.使用PRG模式 四.PRG模式在MVC上的实现 一. 传统的Asp.net页面问题 一个传统的Asp. ...

  2. ASP&period;NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  3. ASP&period;NET MVC with Entity Framework and CSS一书翻译系列文章之目录导航

    ASP.NET MVC with Entity Framework and CSS是2016年出版的一本比较新的.关于ASP.NET MVC.EF以及CSS技术的图书,我将尝试着翻译本书以供日后查阅. ...

  4. ASP&period;NET MVC&plus;EasyUI&plus;Entity FrameWork 整合开发

    本文详细讲解怎么用ASP.NET MVC+EasyUI+Entity FrameWork 来开发一个项目 对于ASP.NET MVC的Jscript库,主要引用 <script type=.mi ...

  5. Using the Repository Pattern with ASP&period;NET MVC and Entity Framework

    原文:http://www.codeguru.com/csharp/.net/net_asp/mvc/using-the-repository-pattern-with-asp.net-mvc-and ...

  6. ASP&period;NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)

    在这章中,我们将学习如何创建一个管理图片的新实体,如何使用HTML表单上传图片文件,并使用多对多关系将它们和产品关联起来,如何将图片存储在文件系统中.在这章中,我们还会学习更加复杂的异常处理,如何向模 ...

  7. &lbrack;转&rsqb;Using the Repository Pattern with ASP&period;NET MVC and Entity Framework

    本文转自:http://www.codeguru.com/csharp/.net/net_asp/mvc/using-the-repository-pattern-with-asp.net-mvc-a ...

  8. ASP&period;NET MVC通用权限管理系统&lpar;响应布局&rpar;源码更新介绍

    一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...

  9. MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)

    前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...

随机推荐

  1. Python的垃圾回收机制

    Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...

  2. MySQL中的while、repeat、loop循环

    循环一般在存储过程和存储函数中使用频繁,这里只给出最简单的示例 while delimiter $$ create procedure test_while() begin declare sum i ...

  3. iPod怎么下载歌曲&quest;用iTunes传文件功能&excl;

    昨儿一小美女拿我的手机听歌,说她不知道iPod怎么下载歌曲,因为还在上学家里不肯给买智能机,怕会影响学业.她的iPod shuffle刚买没多久还不会往里传歌曲,让我帮看看怎么整,心想她应该是没装iT ...

  4. Linux&amp&semi;shell之高级Shell脚本编程-创建函数

    写在前面:案例.常用.归类.解释说明.(By Jim) 使用函数 #!/bin/bash # testing the script function myfun { echo "This i ...

  5. Java实现一个字符串的反转

    Java小程序实现字符串的反转: 方法一: public class reverseString { public static void main(String[] args) { String s ...

  6. VHD&lowbar;Update&lowbar;mount-vhd

    ###################功能说明########################该脚本用来对离线VHD文件更新,导入系统补丁############################### ...

  7. bzoj3573&lbrack;Hnoi2014&rsqb;米特运输

    http://www.lydsy.com/JudgeOnline/problem.php?id=3573 好吧,虽然这是day1最后一题,但却是最水的一题....(前提:看懂题目) 仔细看题! 仔细看 ...

  8. REST深入浅出

    不知你是否意识到,围绕着什么才是实现异构的应用到应用通信的“正确”方式,一场争论正进行的如火如荼:虽然当前主流的方式明显地集中在基于SOAP.WSDL和WS-*规范的Web Services领域,但也 ...

  9. 可以精准解析国内外网站的DNS

    Pure DNS https://puredns.cn/ XsicoDNS https://dns.xsico.cn/ Fun DNS http://www.fundns.cn/ Bai DNS ht ...

  10. Git坑点——remote&colon; error&colon; GH007&colon; Your push would publish a private email address&period;

    使用命令:git push -u origin master   ,把本地库的内容推送到远程库的过程中,出现了问题 ——remote: error: GH007: Your push would pu ...