2012年5月15日 星期二

MiniProfiler with ASP.NET WebForms

上一篇文章「MiniProfiler 2.0.1」就有說到 MiniProfiler 有支援 ASP.NET WebForms 與 WCF,因為我對 WCF 相當不熟,而目前工作所執行的專案就是使用 ASP.NET WebForms,所以看到 MiniProfiler 有支援 WebForms,我就期待在 WebForms 上可以使用,因為在 MVC 的專案開發時使用 MiniProfiler,的確是有很大的幫助,而如果相同的功能可以在 WebForms 上執行就太好了,不過 MiniProfiler 的官網上的使用說明以及作者的部落格文章裡面對於 WebForms 專案如何配置 MiniProfiler 的設定卻是隻字未提。

而 github 上所開放的原始碼裡,WebForms 專案看起來就是個測試追蹤 SQLite 的 Demo 專案,如果要看原始碼中 WebForms 專案的配置設定來做為我們專案修改的參考,我必須說一定看不懂啦!不過我在幾次的測試之後整理出如何為 WebForms 專案配置設定 MiniProfiler 的方式,以下就是我所整理出的心得,分享給有需要的朋友做參考。

 


 

Step.1

先準備好一個 ASP.NET WebForms 網站專案,而且這個專案使用 ADO.NET Entity Framework,

image

 

Step.2

接著就是使用 Nuget 安裝 MiniProfiler 以及 MiniProfiler.EF

因為是 WebForms 專案,所以就不用裝 MiniProfiler.MVC3

SNAGHTML530290

另外記得也更新一下 EntityFramework (4.3.1) 與 jQuery (1.7.2)

SNAGHTML571d60

 

Step.3:Default.aspx.cs

在進行配置設定 MiniProfiler 之前,先做個資料列表用來顯示等一下會用到的資料內容,

image

image

image

 

Step.4:修改 Global.asax

在 Global.asax 中修改以及增加以下的程式內容,記得要加入命名空間的使用「using StackExchange.Profiling;」

void Application_Start(object sender, EventArgs e)
{
    // 應用程式啟動時執行的程式碼
    InitProfilerSettings();
}
/// <summary>
/// Customize aspects of the MiniProfiler.
/// </summary>
private void InitProfilerSettings()
{
    // some things should never be seen
    var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();
    ignored.Add("WebResource.axd");
    ignored.Add("/Styles/");
    MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();
    MiniProfiler.Settings.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();
    MiniProfilerEF.Initialize();
}
protected void Application_BeginRequest()
{
    MiniProfiler profiler = null;
    // might want to decide here (or maybe inside the action) whether you want
    // to profile this request - for example, using an "IsSystemAdmin" flag against
    // the user, or similar; this could also all be done in action filters, but this
    // is simple and practical; just return null for most users. For our test, we'll
    // profile only for local requests (seems reasonable)
    if (Request.IsLocal)
    {
        profiler = MiniProfiler.Start();
    }
}
protected void Application_EndRequest()
{
    MiniProfiler.Stop();
}

 

Step.5 修改 Site.Master

一般做網站都會使用到 Site.Master,如果沒有使用的話,一樣把以下的修改內容給放到你的網頁上,

<%= StackExchange.Profiling.MiniProfiler.RenderIncludes() %>

放在網頁的最下方,這在之前曾經說過,因為 RenderIncludes() 這是會生成一段 Javascript 程式,

把 Javascript 程式或是引用放在網頁的下方,比較不會影響到網頁的載入與生成,

image

 

經過以上的五個步驟之後就完成了 ASP.NET WebForms 的 MiniProfiler 基本配置設定,接下來就是執行網頁看看結果,執行後的網頁左上方可以看到 Profiing Popup,點擊之後展開視窗內容就可以看到 Profiling 資料,

image

點擊 Profiling Popup 內容中的 sql 項目,可以看到追蹤到 EF 所執行的 SQL Command,

image

 

嗯……經由以上的步驟說明就應該清楚地知道如何配置來讓 MiniProfiler 在 ASP.NET WebForms 專案中運作。

 


進階設定

假如我們也想要追蹤前端網頁中的 Javascript 檔案的載入資訊呢?我們可以使用以下的方式,

image

 

展開執行網頁後的 Profiling Popup 視窗,一開始看不出剛才所設定要追蹤的資訊,

image

點擊 Profiling Popup 下方的「show trival」之後就可以看到我們剛剛設定要追蹤的資訊,

image

 

另外我們也可以在 Global.asax 或是 前端的 StackExchange.Profiling.MiniProfiler.RenderIncludes() 去設定 Profiling Popup 的樣式,

image

Global.asax

/// <summary>
/// Customize aspects of the MiniProfiler.
/// </summary>
private void InitProfilerSettings()
{
    // some things should never be seen
    var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();
    ignored.Add("WebResource.axd");
    ignored.Add("/Styles/");
    MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();
    MiniProfiler.Settings.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();
    MiniProfilerEF.Initialize();
    MiniProfiler.Settings.PopupRenderPosition = RenderPosition.Right;   //defaults to left
    MiniProfiler.Settings.PopupMaxTracesToShow = 20;                    //defaults to 15
    MiniProfiler.Settings.RouteBasePath = "~/profiler";                 //e.g. /profiler/mini-profiler-includes.js
    MiniProfiler.Settings.StackMaxLength = 256;                         // default is 120 characters
    MiniProfiler.Settings.PopupShowTrivial = true;
    MiniProfiler.Settings.PopupShowTimeWithChildren = true;
}

修改之後的網頁顯示

image

 

P.S.

我在工作上所執行的專案中使用 MiniProfiler,有關 MiniProifiler 於 Global.asax 裡的設定內容是與上面的設定不同,這必須要多次的調整才能正常執行,所以各位在使用的時候也要自行調整並作多次的測試。

image

 


ASP.NET WebForms 的 MiniProfiler 使用說明就簡短的介紹到這裡,基本上 MVC 專案的設置方式大多可以直接拿到 WebForms 使用,使用 MiniProfiler 就不再只是 ASP.NET MVC 獨享而已,相信在 WebForms 專案中導入使用 MiniProfiler,對開發上會有很大的幫助。

我目前工作所執行的 WebForms 專案也已經導入使用,我可以清楚地知道網頁執行的各個步驟所需花費的時間,開發時就可以知道那一個步驟是導致效能延遲並馬上進行改善,也可以在 Profiling Popup 中看到執行的 SQL Command 內容,善加使用 MiniProfiler 雖不會讓你如虎添翼,但至少可以讓你對於專案的開發能夠掌握更多的資訊。

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。