為什麼使用 Linq 有時候發現效能不是很好,特別會多出來一些GC量。
( 特別是再做手機遊戲的人,GC 造成的卡頓會特別明顯 )
原因 :
C# 在 new Object 之後,會經過GC回收,所以要避免一直new Object, 這樣會給GC比較大的壓力。
舉個栗子 : 簡單的查找
一個使用For 迴圈查找
一個使用Linq 查找
Lamda 表達式是一個語法糖,經過編譯後 會轉換為下面程式碼:
這裡可以查看 : https://reurl.cc/kd4n4n
轉換前:
轉換後 :
可以明顯看到編譯後的程式碼
使用Linq 方式他會創見一個 Class & new Object, 所以他會被GC。(因該要避免)
而且因為在Lamda裡出現的變數都會 "都會變成新Class理的成員", 新Class的成員越多,也就等於GC量越大~ 所以也要小心使用~
結語:
Linq & Lamda 很好用很直覺,但 *不要在迴圈中使用* *不要在Update()中使用* 會產生很多GC !! 請堅持偶爾用用沒關西的原則使用,不要一直用一直爽~
沒有留言:
張貼留言