針對前幾天發布的幾篇文章,將文章的範例程式做整理然後放到 GitHub 上,因為有些朋友看了文章之後還是不太有感覺,不曉得是我文章的內容描述有問題還是文筆不好,所以就會有人反應看了文章之後也跟著做一遍卻發生問題,所以將範例程式放到 GitHub,這樣大家就可以直接下載然後執行。
針對前幾天發布的幾篇文章,將文章的範例程式做整理然後放到 GitHub 上,因為有些朋友看了文章之後還是不太有感覺,不曉得是我文章的內容描述有問題還是文筆不好,所以就會有人反應看了文章之後也跟著做一遍卻發生問題,所以將範例程式放到 GitHub,這樣大家就可以直接下載然後執行。
在 twMVC #15 的這一場研討會裡,我主講「開發的效能與效率」這一個主題,裡面所提到的 MiniProfiler 是我一直相當推薦給大家在開發的時候來使用,除了 ASP.NET MVC with Entity Framework 的專案可使用之外,甚至是 ASP.NET WebForms with Entity Framework 的專案也一樣可以使用,但如果在資料存取並非使用 Entity Framework 而是使用傳統的 ADO.NET 時應該怎麼設定與修改呢?
在這一篇裡將會以 ASP.NET WebForms + ADO.NET + MiniProfiler 3 的使用情境做使用與設定的說明。
MiniProfiler 在今年四月發佈了 3.0 的版本,不過新版本還不太穩定,一直到了這個月所發佈的 3.1.0 這個版本才算穩定,而 3.x 與之前的版本在設定上有些差異,並不是變得比較複雜,反而是更為簡單,而且因應不同 EF 版本與不同的資料存取,在設定上會有所不同,哪些版本應該做什麼樣的設定,在 MiniProfiler 的官網上都有做說明,所以只要照著官網上的說明就可以了。
在 2014-06-14 所舉辦的 twMVC #15 研討會,我所主講的內容裡就有說明 MiniProfiler 的使用,那麼在這裡使用文字與圖片的方式做個簡單的說明。
之前部落格裡介紹 ASP.NET MVC 使用 MiniProfiler 的文章都還是使用 ASP.NET MVC 3,到了 ASP.NET MVC 4 之後就沒有再介紹過了,而 ASP.NET MVC 4 仍然還是可以用 MiniProfiler 整合套件還是使用「MiniProfiler.MVC3」,不過有些地方是需要做些設定上的調整,另外在「MiniProfiler 安全性釋疑」這一篇文章是以 ASP.NET WebForm 來做說明,卻忘了交代 ASP.NET MVC 應該要怎麼做,所以這篇文章就來做個補充說明。
經常來這個部落格的人應該會發現到我一直推薦大家使用 MiniProfiler,大家的反應也都是很好,但卻一直保持觀望,為什麼會這樣呢?其實了解一些朋友的疑慮之後就讓我不禁搖頭,我必須說,好用的工具介紹給大家,各位也必須要自己抓下來安裝之後來做個了解,而不能只是看看文章,覺得東西不錯但有些疑慮擺在心理然後就把這好用的工具給拋在腦後,這樣是不對的啦!
我這邊聽到最多的都是 MiniProfiler 的安全性以及上線後的 Profiling Popup 的顯示……
如果是真的有實際玩過 MiniProfiler 的人就不會有這樣的疑問,玩過的人反而會問的是如何設置權限……
所以就藉著這篇文章來試圖解除還沒有玩過 MiniProfiler 的人存在心中以久的疑慮。
上一篇文章「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 的方式,以下就是我所整理出的心得,分享給有需要的朋友做參考。
MiniProfiler 在這個部落格中的很多文章中都有出現過,甚至於也以此為題寫了有四篇的文章:
哪為什麼現在又要再寫一篇有關 MiniProfiler 的文章呢?
這絕對不是為了要佔篇幅(這裡不是報紙也不是雜誌),也不是為了要騙稿費(我找誰要稿費呀),而是因為 MiniProfiler 在 2012-02-22 所發佈更新的 v2.0 有了蠻多的變革,而我卻是遲至今日才開始想寫這些內容,工作忙碌、twMVC 準備工作滿檔、懶?
總之呢 …… 就看下去吧!
「觀察 Entity Framework 轉換所產出的 SQL Command」這一篇文章當中有簡單介紹了在Oracle ODAC For EF 的情境下如何觀察SQL Command,然而並不是每個方式都管用,而且有的方式會需要在偵錯模式下才能觀察(如使用Entity Visualizer),而之前也曾經介紹過一個可以用來偵測ASP.NET MVC執行效能的套件「MVC-Mini-Profiler」,這一個套件除了偵測執行效能外,有使用Entity Framework的話也可以偵測EF所產生的SQL Command,「ASP.NET MVC 3 + MiniProfiler.MVC3 偵測執行效能」文章裡所使用的資料庫是MS SQL Server,而當資料庫改使用Oracle而EF Provider也使用了Oracle ODAC for EF呢?
這一篇文章就來看看在使用Oracle ODAC for EF的情境下使用MVC-Mini Profiler是否可以偵測到EF所產生的SQL Command。
之前以兩篇文章介紹了有關MiniProfiler在ASP.NET MVC 2 與 ASP.NET MVC 3 的應用
「ASP.NET MVC 2 + MiniProfiler 偵測執行效能」
「ASP.NET MVC 3 + MiniProfiler.MVC3 偵測執行效能」
今天試著把MiniProfiler給裝在之前的資料分頁的範例專案「ASP.NET MVC - 資料分頁(5) 範例程式下載」,
在我自定的MvcSimplePager以及 MvcSimplePostPager, MvcSimplePostPager + Ajax都沒有什麼問題,
但是在原生的MvcPaging的Pager就出現了錯誤,如下:
所有的分頁連結變成了「http://localhost:4371/mini-profiler-results?page=2」
URL應該是 Home/PageMethod1 的部份都被代換成 mini-profiler-result 了……
上一篇文章「ASP.NET MVC2 + MiniProfiler 偵測執行效能」介紹了在MVC2的專案中使用miniprofiler偵測執行效能,
而文章的最後有說到,MVC2 + miniprofiler並無法去偵測到EF所產生的SQL指令碼,
或許是還要改某些地方才可以讓MVC2專案偵測EF的SQL執行,我就沒有再多去研究,
但是看到許多的文章都是以MVC3來做說明,另外在Nuget上面也有看到miniprofiler.MVC3,
所以就直接用MVC3開個新專案來使用miniprofiler。
有時候常常會遇到執行效能的問題,除了找尋讓執行效能延遲的原因,也希望能夠知道每個步驟與環節所耗費的時間,
這樣就可以知道哪些地方發生了問題,或是使用了錯誤的程式寫法而使得系統效能出現問題,
很多人會用的老方法就是在程式執行的開始與結束去記錄時間,然後再把時間做相減後得到一個執行的時間,
但是這會遇到很多個問題,
第一個會遇到的就是,開發時期可以這麼做,
但如果要部屬到測試機或是正式機前,必須要手忙腳亂的把這些用來偵測的程式給移除或是註解起來,
而且還有可能會有不小心遺漏的地方。
第二個會遇到的問題將事前項問題最後所提到的,如果你要偵測的地方很多,那麼你要去下偵測程式碼的地方也很多。
第三個會遇到的問題是,當你所開發的專案有切分很多層時,往往在畫面上就不容易去顯示除了顯示層以外其他層所要偵測的資料。
如果有一個工具可以解決以上的問題,那麼在系統開發就會很方便也更容易及早發現影響效能的地方。