作为一名Web开发者,经常需要使用各种工具来提高开发效率和应用性能。今天,将介绍一款在日常工作中发现非常有价值的工具——MiniProfiler。MiniProfiler是由StackExchange网站群创建并使用的一款工具,它用于分析.NET和Ruby应用程序的性能。
在开发环境中,MiniProfiler可以提供一个页面覆盖层,详细显示应用程序的代码执行情况。对于试图识别应用程序瓶颈的开发者来说,这无疑是一个极其有用的功能。下面是一个来自Jamb博客页面的截图示例,展示了页面渲染所需的步骤,以及在此过程中执行的SQL语句。
在后续的文章中,将更深入地探讨这些功能。现在,让看看如何将MiniProfiler配置到使用Entity Framework 5进行数据库连接的.NET4.5 MVC 4应用程序中。
安装过程非常简单,可以通过Visual Studio内置的包管理器控制台完成。
打开包管理器控制台(工具-> 库包管理器 -> 包管理器控制台),然后输入以下命令:
Install-Package MiniProfiler
包管理器将下载并安装MiniProfiler,并为项目添加所需的引用。
如前所述,将配置MiniProfiler以分析Entity Framework数据库上下文。为此,还需要安装MiniProfiler.EF包,安装方式与MiniProfiler相同:
Install-Package MiniProfiler.EF
接下来,打开Global.asax.vb文件,在Application_Start子程序的顶部添加以下代码:
MiniProfilerEF.Initialize_EF42()
这确保了Entity Framework创建和使用的任何连接都被MiniProfiler捕获并记录。
在同一文件中,在Application_BeginRequest的顶部添加:
MiniProfiler.Start()
在Application_EndRequest的顶部添加:
MiniProfiler.Stop()
现在,需要在希望显示分析器的页面上添加一段代码。个人将这段代码添加到Base.Master中,这是所有其他页面的父级母版页,这样它就可以在每个页面上使用了。需要在
标签中添加的代码如下:<%:MiniProfiler.RenderIncludes %>
可能需要在页面顶部添加一个命名空间引用,如下所示:
<%@ Import Namespace="StackExchange.Profiling" %>
就是这样!值得注意的是,如果没有调用MiniProfiler.Start(),RenderIncludes函数足够智能,不会在浏览器中添加所需的JavaScript文件。个人将.Start()包装在一个Debugger.IsAttached语句中,因此只在本地开发环境中显示分析器。
运行应用程序,看看会发生什么……
“哦,等等,卡尔,撒谎了——它不起作用,在运行MVC4时遇到了以下错误。”
Failed to load resource: the server responded with a status of 404 (Not Found) http://*/mini-profiler-resources/results
如果没有至少解决一个烦恼,这篇文章就不会有趣,对吧?要修复上述错误,需要将以下内容添加到Web.Config文件中:
<system.webServer>
<handlers>
<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode"/>
</handlers>
</system.webServer>