在修改 Global.asax.vb
Imports MvcMiniProfiler Sub Application_BeginRequest() ' 如果是本機連線,MiniProfiler才啟用 If Request.IsLocal() Then MiniProfiler.Start() End If End Sub Sub Application_EndRequest() MiniProfiler.Stop() End Sub
接下來,我們修改Site.Master,
- 先載入 jQuery
- MiniProfiler的Render設定
<!-- MVC預設有載入jQuery,另在 </head>之前加上以下程式碼即可 --> <%: MvcMiniProfiler.MiniProfiler.RenderIncludes() %> </head>
下一步,是在 Controller 裡撰寫測試程式碼,測試程式碼必須使用 Using ~ End Using,例如,
Imports MvcMiniProfiler Public Class HomeController Inherits System.Web.Mvc.Controller Function Index() As ActionResult ViewData("Message") = "歡迎使用 ASP.NET MVC!" ' 取得現在執行HttpContext內的MiniProfiler Dim mp As MiniProfiler = MiniProfiler.Current() ' Step,現在步驟 Using mp.Step("Doing complex stuff") Using mp.Step("Step A") ' 做一些事 System.Threading.Thread.Sleep(100) End Using Using mp.Step("Step B") ' 做一些事 System.Threading.Thread.Sleep(250) End Using End Using Return View() End Function Function About() As ActionResult Return View() End Function End Class
讓我們將網頁執行起來,來看結果。
我們可以看到左上角多了一個數字,我們點擊一下,看內容。
對照一下我們的程式,第一次網頁啟動花費約二秒,Step A 我們Sleep(100),Step B我們Sleep(250),加一加約 2.3 秒。透過這樣的方法,可以讓我們非常明確了解,每一段程式碼執行的效率。就像李昌鈺博士所說:
「有一分證句,說一分話。」
資料庫測速
MiniProfiler還可以針對網頁與資料庫之間進行測速,不過我怎麼測都不成功,但還是有測出一些心得,所以寫下來。他們會要你改寫 web.config ,例如,
<remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" /> <add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider" description="MvcMiniProfiler.Data.ProfiledDbProvider" 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> 之下。
<system.data> <DbProviderFactories> <remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" /> <add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider" description="MvcMiniProfiler.Data.ProfiledDbProvider" type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.7.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" /> </DbProviderFactories> </system.data>
然後修改 Global.asax.vb
Sub Application_Start() AreaRegistration.RegisterAllAreas() RegisterGlobalFilters(GlobalFilters.Filters) RegisterRoutes(RouteTable.Routes) ' 新增以下MiniProfiler設定 MiniProfiler.Settings.SqlFormatter = new MvcMiniProfiler.SqlFormatters.SqlServerFormatter() ' SqlCeConnectionFactory 必須傳入資料庫連線字串 Dim factory = new System.Data.Entity.Infrastructure.SqlCeConnectionFactory("Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated Security=True") Dim profiled = new MvcMiniProfiler.Data.ProfiledDbConnectionFactory(factory) System.Data.Entity.Database.DefaultConnectionFactory = profiled End Sub
而且在測試過程中發現,我是使用 Entity Framework 4.1 (DbContext),目前看來是還無法使用資料庫部份功能,因為現在 MiniProfiler 目前只支援 ObjectContext 物件,我都還沒傳進去就 Visual Studio 就已經跟我報錯了!@_@
另外小小抱怨一下,它的說明文件嚴重不足,
參考資料:
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。