最近在查系統效能的問題,從 SQL Profiler 都錄不到執行很久的 SQL。
但是程式就是執行很久。到底是什麼問題呢?
我的 Mentor Joe 大大 是在程式中插Log的方式去找,另外,我們也可以使用 redgate 的 ANTS Performance Profiler 來找出問題點。
如下圖,HOT的程式到了 LoadRemindData 這個 Method,
我們可以再點右邊的那個 Current call graph 圖示,就會進入那個 LoadRemindData Method,可以再下鑽來看,如下圖,
從上圖可以發現時間花在 DataTable.Select 這個
開啟程式查看 LoadRemindData Method,它先從 DB 取回約3千多筆的資料,SQL執行不花費不到1秒,
但是為了要讓 SERVICE_SERIL_NO 這個欄位不重覆,所以另外新增一個 DataTable 來處理,如下圖,
像這種以某個欄位或是某些欄位為主不重覆的取法,可以在 SQL 透過 Group By 來處理掉,
而不用在 AP 這樣一筆筆的處理。
所以後來我們就直接在 SQL 處理好需要的資料再回傳,就快很多了。如下圖,
參考資料
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^