1. 程式人生 > >如何檢測mvc效能和sql語句

如何檢測mvc效能和sql語句

mvc中使用linq如何檢測sql語句

.net中使用mvc開發已經是一種趨勢,不僅僅是.net ,java 等越來越多的開發者更傾向於mvc這種開發模式,在.net mvc 使用linq非常方便,各種方法擴充套件也是很方便的,看不到sql語句這個使用就要使用 MiniProfiler 來檢測sql語句的和提升sql語句的效能。MiniProfile

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將檢測僅有引數值存在差 異的多個查詢。

第一步:通過Nuget下載MiniProfile

把這個三個dll檔案下載下來

可能有的同學不懂這個nuget ,我第一次下這個miniprofile,照著部落格上寫,報了版本錯誤。如果不用nuget ,那你就引用我自己上傳的這三個dll檔案。

MiniProfiler下載連結

第二步:新增MiniProfiler相關檢測的程式碼到Global.asax

using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using StackExchange.Profiling;
using StackExchange.Profiling.EntityFramework6;
namespace First_MinProfile
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            MiniProfilerEF6.Initialize();
        }
        protected void Application_BeginRequest()
        {
            MiniProfiler.Start();
        }
        protected void Application_EndRequest()
        {
            MiniProfiler.Stop();
        }
    }
}

a,b,c,d,e,f.......等26個字母認識的話,這個三個事件大概的意思能懂應該難度不是很大。

第三步:相關顯示和配置檔案的修改

1.在Views\Shared\_Layout.cshtml檔案的body前面加上一段程式碼,讓監控展示在頁面上。@StackExchange.Profiling.MiniProfiler.RenderIncludes()


2.Web.config加入一個handlers 處理,webServer這個節點下面新增一個handlers節點

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

第四步:檢視結果簡單分析

單擊 more columns 我們可以看到

我們簡單地分析一下從傳送這條../Home/Index請求到頁面上顯示出來花了185毫秒,sql訪問資料庫花24%,賣個關子,那麼問題來了,整個sql語句的查詢到底花了多少時間,如果你知道也可以留言哦!這樣可以細微監控方法內部的時間,方便、快速地幫我們找出我們的程式的瓶頸所在。