一種編譯技術。
優點:
- 支持JIT編譯:在運行時將IL編譯成機器碼。首次執行稍慢,好處在于運行更快,迭代更高效。
- 構建速度快:無需將IL轉成C++,構建過程省去了IL2CPP的轉換和原生編譯步驟,適合開發階段快速階段測試和構建。
- 調試體驗優秀:支持熱重載、斷點調試、變量查看、Call Stack等功能.
- 構建包體小:沒有龐大的C++生成代碼和原生庫,在某些平臺(如PC)可以獲得更小的包體。
- 兼容性好:Mono支持大部分的C#功能和.NET API。
- 適用于某些平臺:Unity編輯器就是跑在Mono上,很多的開發工作流程都是基于Mono。
缺點:
- JIT導致的平臺限制:iOS平臺禁止使用JIT——Mono無法用于iOS發布。
- 運行性能差于IL2CPP:由于Mono是JIT形式,因此無法提前進行深度優化,在移動端、嵌入式設備等場景中的性能會明顯弱于IL2CPP,特別是啟動時間和內存分配效率。
- 可逆性高,安全性差:Mono使用IL文件運行,容易被反編譯。
- GC垃圾回收效率相對較低:Mono的Mono GC(Boehm GC)在大內存或高頻率分配場景下的效率較差,IL2CPP提供的UnityGC
- 對新語言的支持有限:Unity的舊版Mono運行時不支持最新的C# 8 / 9特性,例如異步流、模式匹配增強。
Mono構建Unity項目流程:C#源碼 --> 用C#編譯器編譯成中間語言IL--> 生成 .NET DLL。
Mono打包后的結果是:生成.Net IL,存儲在.dll文件中,屬于一種字節碼格式,不是原生的機器碼。
Mono是一個虛擬機,在運行是動態讀取IL字節碼并執行,執行方式分兩種:
1. (默認)JIT模式:
Mono會在程序運行時將IL轉換為機器碼(本地指令),然后執行,對應的機器碼由當前平臺(Windows/Android)的CPU架構生成。
2. (可選)解釋執行模式:
Mono也可以直接逐條解釋執行IL(性能較差,一般用于調試/嵌入設備)。