[NET]大量資料的 DataTable.Select 操作要小心

最近在查系統效能的問題,從 SQL Profiler 都錄不到執行很久的 SQL。

但是程式就是執行很久。到底是什麼問題呢?

我的 Mentor Joe 大大 是在程式中插Log的方式去找,另外,我們也可以使用 redgateANTS 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 處理好需要的資料再回傳,就快很多了。如下圖,

參考資料

ANTS Performance Profiler

 

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^