unity foreach 中產生GC的問題

2021-08-06 05:52:18 字數 450 閱讀 4086

問題產生:

在unity中使用foreach會又明顯的gc產生,而這些gc又是不必要的

問題原因:

網上有很多答案,但是很多人都止步與這是乙個bug,但是對這個bug產生的原因沒有做過多的深究,其實原因很簡單,是因為老版本的mono編輯器(並不是unity的問題,所有以為把unity4.x公升到unity5.x就能解決這個問題是錯誤的),在執行foreach時,如果是值型別物件,mono編輯器會多做一次裝箱的操作(值型別轉化為介面型別),因為mono在翻譯foreach時,會在finally中無腦做一次裝箱的操作,而就是因為這次操作會產生格外的gc。

為什麼會做無腦的裝箱操作呢?

void testlistgetemulator()}}

那是因為getenumerator() 和 current 這兩個方法的底層**都不是返回的泛型引數,如果當前返回的是值型別,就會做一次裝箱操作轉化為介面型別

linux 中產生swap檔案

有時候在用vim開啟檔案時提示類似以下的資訊 e325 注意 發現交換檔案 exportcert.cpp.swp 所有者 liuchuanliang 日期 thu mar 1 17 15 41 2012 檔名 liuchuanliang ftsafe entersafe shuttle linux ...

Docker中產生Core Dump檔案

在linux中,要使得程式崩潰時產生core dump檔案,首先需要設定core檔案的大小,預設的core dump文大小最大為0,也就是預設不產生,在這裡我們就不做限制,執行 ulimit c unlimited可以通過以下命令檢視當前ulimit配置 root proxy demo ulimit...

VC中產生隨機數

需要的標頭檔案 stdlib.h 庫函式 srand rand time 方法 1.首先設定種子srand unsigned time null 使用當前時間作為種子是多數人的習慣做法 2.產生隨機數 rand 可以產生乙個隨機數 範圍在0 rand max 32767 之間 如果要產生乙個 min...