如何使用MiniProfiler(附最新版MiniProfiler使用心得)
MiniProfiler這個工具早就久仰大名,不過之前一直沒有動力去用,正好最近手上有個ASP.NET MVC的項目,正好拿來試試手,下面是使用最新的4.0.138版本的心得體會以及踩到一些小坑的解決過程,希望能對大家有所幫助。
?開發環境如下:
Visual?Studio 2017: 15.8.6
MiniProfiler家族:4.0.138
項目框架:4.6.1
注意:MiniProfiler?4.0.138版本要求項目框架不能低于4.6.1
在使用過程中主要參考了以下資料:
使用MiniProfiler給Asp.net MVC和Entity Framework號脈(附源碼)
MiniProfiler工具介紹(監控EF生成的SQL語句)--EF,迷你監控器,哈哈哈
MiniProfiler官方文檔(不過官方文檔不夠完善,有些坑還是靠著上面的資料解決的)
下面開始吧!
寫在前面:
0、建議每做一步都編譯下項目,確定一切OK!
1、首先從Nuget安裝?MiniProfiler.Mvc5?包,順帶會把?MiniProfiler、MiniProfiler.Shared?包也一并裝上。
2、按照官方文檔的說明,編輯項目的Global.asax文檔。
注意:這里會遇到第一個小坑,官方文檔里面居然有typo錯誤
.AddViewPofiling() // Add MVC view profiling (you want this) 錯誤 .AddViewProfiling() // Add MVC view profiling (you want this) 正確,函數少了一個r注意:增加相應的命名空間
using StackExchange.Profiling; using StackExchange.Profiling.Mvc;3、在布局頁當中加入以下代碼:
@using StackExchange.Profiling; <head>.. </head> <body>...@MiniProfiler.Current.RenderIncludes() </body>注意:在上述的第二份資料中代碼是這樣:
@MiniProfiler.RenderIncludes()但最新4.0版本的MiniProfiler應該是有了改動,關于RenderIncludes函數有更多參數可用,具體可以參考官方的ASP.NET MVC示例
小提示:MiniProfiler是可以隱藏的,可以使用鍵盤的ALT+P來切換顯示。
4、修改配置文件Web.config,在節點<handlers>中加上如下配置?
<add name="MiniProfiler" path="profiler/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />注意:這里的path有可能會有變化,因為RenderIncludes函數會生成類似于下面這樣的腳本代碼,需要根據生成的文件路徑進行調整,上面的兩篇文檔使用的是MiniProfiler 2.0及3.0版本,所以這里與上面的資料中的路徑不同,
如果將來遇到MiniProfiler不能生效的情況,可以通過Chrome的開發者工具查看Console上的提示來確認這里是否有錯誤
<script async="async" id="mini-profiler" src="/profiler/includes.min.js?v=4.0.138+gcc91adf599" data-version="4.0.138+gcc91adf599" data-path="/profiler/" data-current-id="2a324576-7a4e-41d6-abef-bcc82e205080" data-ids="4388d9aa-5b59-405f-b27f-6a05959910fb,2a324576-7a4e-41d6-abef-bcc82e205080" data-position="Right" data-authorized="true" data-max-traces="10" data-toggle-shortcut="Alt+P" data-trivial-milliseconds="2.0" data-ignored-duplicate-execute-types="Open,OpenAsync,Close,CloseAsync"></script>更新:
?不需要添加handlers配置,使用runAllManagedModulesForAllRequests即可
<system.webServer><validation validateIntegratedModeConfiguration="false" /><modules runAllManagedModulesForAllRequests="true" /><!--<handlers><add name="MiniProfiler" path="profiler/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" /></handlers>--></system.webServer>?
5、到這里按理說就能看到頁面的右上角的MiniProfiler面板了,完全展開大概會像這樣:
可以看到整個頁面的加載時間和流程中各個步驟的耗時。
6、不過對于真正的項目來說,上面這些數據還是不夠的,我們還需要對SQL語句進行調優,下面來看看怎么做。
首先我們需要封裝一個可以返回DbConnection的函數來讓profile的代碼能夠注入到項目代碼中,對于一個結構良好的項目來說這完全不是問題
提示:因為使用的項目是直接使用原生ADO.NET訪問數據,所以需要這個步驟,如果是使用EF6的話,只需要添加?MiniProfiler.EF6?的引用,不需要任何配置就可以在面板上看到EF生成的SQL語句。
public DbConnection GetConnection() {DbConnection connection = new System.Data.SqlClient.SqlConnection("這里是數據庫的連接字符串");return new StackExchange.Profiling.Data.ProfiledDbConnection(connection, MiniProfiler.Current); }然后在實際查詢數據的代碼周圍使用如下代碼:
var profiler = MiniProfiler.Current;using (profiler.Step("查詢數據")){var sqlSelect = string.Format("SELECT * FROM table");var data = SqlHelper.Query(sqlSelect);}然后就可以看到類似這樣的效果:
?
(以上截圖來自微軟官方ASP.NET MVC教程項目,可以很直觀的看到EF生成的代碼)
一些在后面的話:
1、資料中提到的同類的NanoProfiler,還有Glimpse,不過Glimpse已經不再活躍了,下面有空的時候準備再看下NanoProfiler。
2、MiniProfiler的源代碼及示例項目運行的時候會提示以下錯誤,查了下這個錯誤看起來和.NET Core有關系,但是沒有找到如何解決的辦法,如果有朋友能告知的話,感激不盡。
---------------------------
Microsoft Visual Studio
---------------------------
無法運行項目。"RunCommand" 屬性未定義。
---------------------------
確定
---------------------------
轉載于:https://www.cnblogs.com/s5689412/p/9809872.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的如何使用MiniProfiler(附最新版MiniProfiler使用心得)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django--实现分页功能,并且基于c
- 下一篇: time模块 random模块