[Asp.net mvc] 在Asp.net mvc 中使用MiniProfiler

MiniProfilerStack Overflow團隊設計的一款性能分析的小程序。能夠對一個頁面自己,及該頁面經過直接引用、Ajax、Iframe形式訪問的其它頁面進行監控,監控內容包括數據庫內容,並能夠顯示數據庫訪問的SQL(支持EF、EF CodeFirst等 ),而且以很友好的方式展示在頁面上。官網連接:http://miniprofiler.com/
今天使用到這個工具,記錄下使用方法與填坑.(注:本文使用asp.net mvc示例)javascript

一.安裝MiniProfiler

在Visual Studio中可直接經過Nuget安裝.
命令行方式安裝輸入:Install-Package MiniProfiler
圖形界面安裝直接搜索MiniProfiler便可
css

二.配置

[1].配置Global.asax.cs文件:html

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.IsLocal)
    {
        MiniProfiler.Start();
    }
}
protected void Application_EndRequest(object sender, EventArgs e)
{
    if (Request.IsLocal)
    {
        MiniProfiler.Stop();
    }
}

[2].Layout頁面引用:
java

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @if (Request.IsLocal)
    {
        @StackExchange.Profiling.MiniProfiler.RenderIncludes()
    }
</head>

MiniProfiler.RenderIncludes()方法會在頁面上生成一個腳本引用文件:jquery

<script async type="text/javascript" id="mini-profiler" 
    src="/mini-profiler-resources/includes.js?v=ySF6M98CBehTtL86BbiEmys9yxR1HKazhe2sznfdUWQ=" data-version="ySF6M98CBehTtL86BbiEmys9yxR1HKazhe2sznfdUWQ=" 
    data-path="/mini-profiler-resources/" data-current-id="dd06f423-464a-4c45-931c-96495a138813" data-ids="dd06f423-464a-4c45-931c-96495a138813" 
    data-position="left" data-trivial="false" data-children="false" data-max-traces="15" data-controls="false" data-authorized="true" 
    data-toggle-shortcut="Alt+P" data-start-hidden="false" data-trivial-milliseconds="2">
</script>

這個腳本會直接報404錯誤.因此要再配置下web.config,在system.webServer節點下增長:
web

<handlers>
  <add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
</handlers>

再刷新下頁面就能夠看到了,默認在頁面左上角顯示.附上成果圖:sql


三.監控EF的操做數據庫

默認MiniProfiler是不會監控Sql的若是須要監控EntityFramework或其餘方式生成的sql,執行的時間等還須要些其餘的配置:
首先根據EF的版本下載對應的MiniProfiler版本,這裏我使用的EF6,如圖:

安裝好設置下Global.asax.cs:bootstrap

MiniProfilerEF6.Initialize();

注意:小程序

1.若是使用了數據庫初始化工具要把這句代碼放到初始化代碼的前面,不然會報以下錯誤:

在嘗試添加「Loaded」事件處理程序前,實體框架已在使用一個 DbConfiguration 實例。在使用實體框架前,「Loaded」事件處理程序只能做爲應用程序的一部分添加。有關詳細信息,請參閱 http://go.microsoft.com/fwlink/?LinkId=260883。


2.若是下載的MiniProfiler.EF(Obsolete)可能會報以下錯誤:

沒法將類型爲「StackExchange.Profiling.Data.EFProfiledDbConnection」的對象強制轉換爲類型「System.Data.SqlClient.SqlConnection」。

解決辦法詳細可參考重典的博客(點我跳轉:)),也就是在初始化代碼後添加這段代碼:

 MiniProfilerEF.Initialize();
 System.Data.Entity.DbConfiguration.Loaded += (sender, e) =>  
        e.ReplaceService<System.Data.Entity.Core.Common.DbProviderServices>(
             (services, o) => EFProfiledSqlClientDbProviderServices.Instance);
相關文章
相關標籤/搜索