一個簡單卻誤人很深的性能比較問題如下:
群里剛出現了一個反射與Emit的性能比較:
測試者:for了20000000次的循環,終於得出了Emit比反射性能來的好結論!!!
結論對不?對!
比較普通的用string和stringbuilder的比較,也喜歡for 200000000次的循環,然后得出后者性能好的結論。
結論對不?對!
縱觀基本幾有的性能測試,都喜歡for 100000000后面的0越多越好, 會感覺效果與結論更顯著一些!!!
其實誤區就在這次數,理論與現實的差距!!!!!
如果把for的次數設置底於500以下,很明顯前者性能好一些。
OK,現實是什么?現實就是很少場景會用到一次操作for超過1000次的,通常for 500次以下的居多。
因此現實的情況是:(web多線程)並發多,單次循環次數多!
舉例:你讀取50條數據,然后反射為實體,輸出!(這么多實在的現實場景!!!而讀500000000條數據再轉實體輸出的有沒有?有,有病!)
OK, 然后一個用戶來訪問,你就for了50次。
那么1000人來訪問,是啥情況?for了50*1000???(自己猜了)
這就是現實了:1000個並發50次和一個人循環50*1000次的性能差別。
本文旨在告訴大伙:
如果你還看不懂這些,沒事,都有個過渡,IT領域學錯比不學好,被誤導是好事,多學,錯也不打緊!
如果你看的懂,有過誤導情節,如果你追求性能,理論歸理論,現實歸現實,結合才是硬道理!