ILRuntime使用笔记

如果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类型的方式启动或停止协程

9. 泛型方法在展开前无法分析生成绑定文件(除非有调用的地方并传递了泛型类型)

10. 多维数组只能用基础类型,可以把多维数组[,]改为数组的数组[][]

11. 如果自定义委托类型是热更里定义的,那就不能传主工程内的方法给它(可以使用Action或者Func来代替自定义的委托)

12. 热更内Attribute暂只支持基础类型参数

 

建议

1. 在热更代码中不建议继承MonoBehaviour

2. 尽可能避免使用特性(Attribute),反射(Reflection)

 

ILRuntime不支持Attribute的继承操作

1. 子类不会继承基类的属性标签,所以热更工程中子类也要有标签

2. Attribute自身的继承

 

调试条件

1. 安装ILRuntime的VS调试插件(Github上可下载)

2. 确定启用DEBUG宏和禁用DISABLE_ILRUNTIME_DEBUG宏

3. 检查ILRDomain.DebugService.StartDebugService(56000)是否启用

4. 检查PDB是否被加载

5. 检查DLL是否为DEBUG版本(提高调试准确性)

以上条件满足还可以支持真机调试

 

调试过程

1. 运行Unity编辑器工程并保证ILRDomain.DebugService.StartDebugService(56000)被调用

2. 在VS热更工程中 点击菜单栏 --> 调试 --> Attach to ILRuntime(注意使用一样的端口)

3. 如果调试失败,请检查端口是否有效,是否被防火墙屏蔽

 


参考:https://blog.csdn.net/Chen_Fen/article/details/115668780

参考:https://www.lfzxb.top/et-6-with-ilruntime/

参考:https://www.dazhuanlan.com/magicshui/topics/1567053

posted @ 2020-04-14 18:22  何文西  阅读(2175)  评论(0编辑  收藏  举报