如果ILRuntime使用時性能有問題,需要確認以下幾點:
1.發包前是否做了自動分析CLR綁定
2.是否注冊了值類型綁定
3.熱更DLL是否為release模式編譯
4.發包前是否關閉了Development build
5.編輯器下是否定義了DISABLE_ILRUNTIME_DEBUG
注意事項
1. 一般嵌套task或者foreach里多次await容易出現代碼執行不到
2. struct在ILRuntime里,如果作為類成員變量,性能比class更低
3. struct不能雙層嵌套(值類型在VM里裝箱,雙層嵌套要兩層尋址,目前無法兩層尋址)
4. 熱更里try catch的話,需要取ex.Data["StackTrace"]和ex.Data["Message"]
5. 熱更里的委托不是真的委托類型,沒辦法通過Delegate.CreateDelegate創建
6. 直接跟內存和操作系統交互的東西都沒法在熱更里弄,需要在主工程做這種事情
7. ref out關鍵字謹慎使用,比如傳遞ref/out 靜態變量時會報錯
8. 協程無法使用字符串啟動,只支持參數為IEnumerator類型的方式啟動或停止協程
建議
1. 在熱更代碼中不建議繼承MonoBehaviour
2. 盡可能避免使用特性(Attribute),反射(Reflection)
ILRuntime不支持Attribute的繼承操作
1. 子類不會繼承基類的屬性標簽,所以熱更工程中子類也要有標簽
2. Attribute自身的繼承
參考:https://blog.csdn.net/Chen_Fen/article/details/115668780