原文:
tolist()所帶來的效能影響
前幾天優化師弟寫的**,有乙個地方給我留下很深刻的印象,就是我發現他總是將plinq的結果tolist<>(),然後再返回給主程式,對於這一點我十分不解,於是去問他是什麼原因,得到的答案很幽默:因為習慣。
有時候對於方法的不甚了解加上「習慣」,往往是程式效能和穩定性終結者,就拿這個case來說吧,原始**如下:
var query = from cr in lcrnormal.asparallel() let listid = from crt in lcrnormal group crt by crt.keyvalue into m select m.max(n => n.dbid) where listid.contains(cr.dbid) && !cr.isregularrecord && cr.status != 3 select new computingresultfortemp() ;
經過以上plinq後,泛型列表中大概還剩下60萬至100萬條資料,然後我們這位師弟做了兩個很「施瓦辛格」的動作:tolist<>()和count(),測試程式執行在一台4*2g hz,12gb記憶體的伺服器上,竟然跑了2天多!我覺得正式這兩個方法導致了程式效能的降低,為了 確定我的判斷,我分別在以上**、tolist<>()和count()周圍加上了stopwatch計時器,然後將結果以文字的形式輸出:
● 100萬資料plinq:
**********3/26/2011 01:34:31 pm **********=
**(getdeletedrecords)start plinq(linq fitter)
**********3/26/2011 01:38:38 pm **********=
**(getdeletedrecords)finish plinq (linq fitter)
● 80萬資料tolist <>():
**********3/26/2011 03:22:10 pm **********=
**(getdeletedrecords)start get list
● 80萬資料count():
**********3/28/2011 02:12:09 pm **********=
**(getdeletedrecords)start get count
**********3/28/2011 08:50:55 pm **********=
** (getdeletedrecords)finish get count
日誌格式是這樣:任務開始時輸出當前時間和「start」,任務結束時輸出「finish」,當從日誌中可以看出,plinq的效率還是很高的,只執行了幾分鐘;tolist<>()方法在執行了1天多後人為終止,所以只有start沒有finish;count()方法也執行了6小時多。
所以最終優化方案很簡單,去掉了tolist和count,程式從幾天的執行時間一下縮短到幾個小時。
ToList 所帶來的效能影響
前幾天優化師弟寫的 有乙個地方給我留下很深刻的印象,就是我發現他總是將plinq的結果tolist 然後再返回給主程式,對於這一點我十分不解,於是去問他是什麼原因,得到的答案很幽默 因為習慣。有時候對於方法的不甚了解加上 習慣 往往是程式效能和穩定性終結者,就拿這個case來說吧,原始 如下 var...
ToList 所帶來的效能影響
前幾天優化師弟寫的 有乙個地方給我留下很深刻的印象,就是我發現他總是將plinq的結果tolist 然後再返回給主程式,對於這一點我十分不解,於是去問他是什麼原因,得到的答案很幽默 因為習慣。有時候對於方法的不甚了解加上 習慣 往往是程式效能和穩定性終結者,就拿這個case來說吧,原始 如下 var...
ToList 所帶來的效能影響
前幾天優化師弟寫的 有乙個地方給我留下很深刻的印象,就是我發現他總是將plinq的結果tolist 然後再返回給主程式,對於這一點我十分不解,於是去問他是什麼原因,得到的答案很幽默 因為習慣。有時候對於方法的不甚了解加上 習慣 往往是程式效能和穩定性終結者,就拿這個case來說吧,原始 如下 c s...