ToList 所帶來的效能影響

2021-09-22 09:28:53 字數 1481 閱讀 6988

前幾天優化師弟寫的**,有乙個地方給我留下很深刻的印象,就是我發現他總是將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()

;query.tolist();

經過以上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 所帶來的效能影響

原文 tolist 所帶來的效能影響 前幾天優化師弟寫的 有乙個地方給我留下很深刻的印象,就是我發現他總是將plinq的結果tolist 然後再返回給主程式,對於這一點我十分不解,於是去問他是什麼原因,得到的答案很幽默 因為習慣。有時候對於方法的不甚了解加上 習慣 往往是程式效能和穩定性終結者,就拿...

ToList 所帶來的效能影響

前幾天優化師弟寫的 有乙個地方給我留下很深刻的印象,就是我發現他總是將plinq的結果tolist 然後再返回給主程式,對於這一點我十分不解,於是去問他是什麼原因,得到的答案很幽默 因為習慣。有時候對於方法的不甚了解加上 習慣 往往是程式效能和穩定性終結者,就拿這個case來說吧,原始 如下 c s...