ASP.NET MVC - 使用MVC MiniProfiler測試您的網頁跑多快

在MVC 3專案中,NuGet 指令:Install-Package MiniProfiler

在修改 Global.asax.vb

01Imports MvcMiniProfiler
02 
03Sub Application_BeginRequest()
04    ' 如果是本機連線,MiniProfiler才啟用
05    If Request.IsLocal() Then
06        MiniProfiler.Start()
07    End If
08End Sub
09 
10Sub Application_EndRequest()
11    MiniProfiler.Stop()
12End Sub

接下來,我們修改Site.Master,
  1. 先載入 jQuery
  2. MiniProfiler的Render設定

1<!-- MVC預設有載入jQuery,另在 </head>之前加上以下程式碼即可 -->
2<%: MvcMiniProfiler.MiniProfiler.RenderIncludes() %>
3</head>

下一步,是在 Controller 裡撰寫測試程式碼,測試程式碼必須使用 Using ~ End Using,例如,

01Imports MvcMiniProfiler
02 
03Public Class HomeController
04    Inherits System.Web.Mvc.Controller
05 
06    Function Index() As ActionResult
07        ViewData("Message") = "歡迎使用 ASP.NET MVC!"
08 
09        ' 取得現在執行HttpContext內的MiniProfiler
10        Dim mp As MiniProfiler = MiniProfiler.Current()
11 
12        ' Step,現在步驟
13        Using mp.Step("Doing complex stuff")
14            Using mp.Step("Step A")
15                ' 做一些事
16                System.Threading.Thread.Sleep(100)
17            End Using
18 
19            Using mp.Step("Step B")
20                ' 做一些事
21                System.Threading.Thread.Sleep(250)
22            End Using
23        End Using
24 
25        Return View()
26    End Function
27 
28    Function About() As ActionResult
29        Return View()
30    End Function
31 
32End Class

讓我們將網頁執行起來,來看結果。


我們可以看到左上角多了一個數字,我們點擊一下,看內容。


對照一下我們的程式,第一次網頁啟動花費約二秒,Step A 我們Sleep(100),Step B我們Sleep(250),加一加約 2.3 秒。透過這樣的方法,可以讓我們非常明確了解,每一段程式碼執行的效率。就像李昌鈺博士所說:
「有一分證句,說一分話。」

資料庫測速

MiniProfiler還可以針對網頁與資料庫之間進行測速,不過我怎麼測都不成功,但還是有測出一些心得,所以寫下來。

他們會要你改寫 web.config ,例如,

1<remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" />
2<add name="MvcMiniProfiler.Data.ProfiledDbProvider"
3     invariant="MvcMiniProfiler.Data.ProfiledDbProvider"
4     description="MvcMiniProfiler.Data.ProfiledDbProvider"
5     type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.7.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />

測試時,一直出現錯誤,說他不認識這堆東西,後來我去查最上層的(C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config),要多加一個DbProviderFactories才對。

加在 <configuration> 之下。

1<system.data>
2    <DbProviderFactories>
3        <remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" />
4        <add name="MvcMiniProfiler.Data.ProfiledDbProvider"
5             invariant="MvcMiniProfiler.Data.ProfiledDbProvider"
6             description="MvcMiniProfiler.Data.ProfiledDbProvider"
7             type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.7.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
8    </DbProviderFactories>
9</system.data>

然後修改 Global.asax.vb

01Sub Application_Start()
02    AreaRegistration.RegisterAllAreas()
03 
04    RegisterGlobalFilters(GlobalFilters.Filters)
05    RegisterRoutes(RouteTable.Routes)
06 
07    ' 新增以下MiniProfiler設定
08    MiniProfiler.Settings.SqlFormatter = new MvcMiniProfiler.SqlFormatters.SqlServerFormatter()
09    ' SqlCeConnectionFactory 必須傳入資料庫連線字串
10    Dim factory = new System.Data.Entity.Infrastructure.SqlCeConnectionFactory("Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated Security=True")
11    Dim profiled = new MvcMiniProfiler.Data.ProfiledDbConnectionFactory(factory)
12    System.Data.Entity.Database.DefaultConnectionFactory = profiled
13End Sub

而且在測試過程中發現,我是使用 Entity Framework 4.1 (DbContext),目前看來是還無法使用資料庫部份功能,因為現在 MiniProfiler 目前只支援 ObjectContext 物件,我都還沒傳進去就 Visual Studio 就已經跟我報錯了!@_@

另外小小抱怨一下,它的說明文件嚴重不足,

參考資料:

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。