ToList 所帶來的效能影響

2022-09-16 19:57:11 字數 1514 閱讀 3422

前幾天優化師弟寫的**,有乙個地方給我留下很深刻的印象,就是我發現他總是將plinq的結果tolist<>(),然後再返回給主程式,對於這一點我十分不解,於是去問他是什麼原因,得到的答案很幽默:因為習慣。

有時候對於方法的不甚了解加上「習慣」,往往是程式效能和穩定性終結者,就拿這個case來說吧,原始**如下:

[c-sharp]view plain

copy

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

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

ToList 所帶來的效能影響

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