第5个例子讲解是重定向,原理按照官网的说法是:当IL解译器发现需要调用某个指定CLR方法时,将实际调用重定向到另外一个方法进行挟持,再在这个方法中对ILRuntime的反射的用法进行处理。例如new方法就是不能直接用的,要进行重定向才可以。例子中举了Debug.Log这个情况,比如我们在DLL里调用Debug.Log,默认情况下是无法显示DLL内堆栈的,但是经过CLR重定向之后可以做到输出DLL内堆栈。实际测试的情况,和这个例子讲解的有出入,可能是例子不完整的缘故。经过我自己测试发现,有两个问题例子没有讲明白,第一个就是,如果在重定向之前和之后调用同样的Debug代码,输出堆栈是一样的,重定向之后的堆栈信息并没有更详细。第二个情况就是,如果我注释重定向之前的输出,则,重定向之后的输出会带有更详细的堆栈信息。

AppDomain.RegisterCLRMethodRedirection(MethodBase mi, CLRRedirectionDelegate func)方法进行重定向的注册,而func方法涉及到了指针,mi参数就是我们需要重定向的方法。

第6个例子讲解的是CLR绑定,使用这种绑定,可以产生更少的GC,按照教程的说法:默认情况下,从热更DLL里调用Unity主工程的方法,是通过反射的方式调用的,这个过程中会产生GC Alloc,并且执行效率会偏低。另外,例子中也指出:CLR绑定会生成较多C#代码,最终会增大包体和Native Code的内存耗用,所以只添加常用类型和频繁调用的接口即可。使用的方法很简单:点击Unity菜单里面的ILRuntime->Generate CLR Binding Code来生成绑定代码。前提是,需要生成绑定代码的类预先写在了ILRuntimeCLRBinding类中,生成的绑定代码在"Assets/ILRuntime/Generated"文件夹中。通过自己的测试发现,感觉是没有啥区别的。。。。下面是没有绑定时的性能测试结果:

下面这张是绑定后的性能测试结果:

可以看出来,基本没有什么区别。不清楚问题在哪儿。

ILRuntime学习(之四)相关推荐

  1. [转]Docker学习之四:使用docker安装mysql

    本文转自:https://blog.csdn.net/qq_19348391/article/details/82998391 Docker学习之一:注册Docker Hub账号 Docker学习之二 ...

  2. ETL学习之四:SQL Server Integration Services入门

    ETL学习之四:SQL Server Integration Services入门 SSIS就是微软在SQL SERVER2005上对DTS的升级,不得不说,微软在BI上是花了很大功夫的,包括提供了S ...

  3. Kafka学习之四 Kafka常用命令

    2019独角兽企业重金招聘Python工程师标准>>> Kafka学习之四 Kafka常用命令 Kafka常用命令 以下是kafka常用命令行总结: 1.查看topic的详细信息 . ...

  4. 智能会议系统(33)---WebRTC学习之四:最简单的语音聊天

    WebRTC学习之四:最简单的语音聊天 VoiceEngine中与最简单语音聊天相关的头文件有五个,如下表所示: 头文件 包含的类 说明 voe_base.h VoiceEngineObserver ...

  5. nas4free 安装mysql_[转]Docker学习之四:使用docker安装mysql

    Docker学习之一:注册Docker Hub账号 Docker学习之二:Docker基本简单操作命令 Docker学习之三:Docker在linux下简单安装使用 Docker学习之四:使用dock ...

  6. ILRuntime学习(之一)

    最近在学习ET框架,然后被群友告知,要先学ILRuntime.行吧,谁让咱是小白呢..... ILRuntime的学习资料我是参考的github上的教程https://ourpalm.github.i ...

  7. 深度学习之四:常用模型和方法

     九.Deep Learning的常用模型或者方法 9.1.AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有 ...

  8. linux复制文件命令cat ,Linux学习之四(复制移动文件命令cp等及查看文本命令cat等)2017-03-28...

    一.复制和移动文件 cp: copy -r:递归复制 -i:交互式命令 -f:强制性复制 -p:保留文件原有文件属性 -L:复制链接文件的指定文件,不保持链接属性 -P:复制链接文件并保持链接属性 - ...

  9. comparator 多个条件控制_JUnit5学习之四:按条件执行

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...

最新文章

  1. 如何利用离散Hopfield神经网络进行高校科研能力评价(2)
  2. 我的第一个用Hibernate框架写的小例子
  3. i.MX 系列CPU HAB漏洞SecureBoot漏洞
  4. 压箱底总结:流系统端到端一致性对比
  5. SpringMVC 实例应用 -- 不同方式控制器实现与参数传递
  6. C++ limits头文件的用法numeric_limits
  7. 【转】设计模式学习笔记之命令模式
  8. sqlserver 分组合并列_哪个“三人组”是历史最强组合?数据显示最均衡组合令人意外...
  9. excel设置默认值_职场办公必备的7个Excel应用技巧解读,易学易懂,收藏备用!...
  10. php dlt645,RT-Thread-Mirror
  11. Win-MASM64汇编语言-JMP指令
  12. springboot使用Freemarker继承
  13. 锐捷ac怎么发现局域网ap_锐捷APAC初始化登录管理说明及热点问题
  14. 【STM32Cube_13】使用硬件I2C读写EEPROM(AT24C02)
  15. usb计算机连接 不再弹出,电脑usb无法安全弹出问题解决办法
  16. 计算机领域论文 网站,各类论文网站大全
  17. 三体归零者和盘龙鸿蒙,三体中的神级文明 归零者 到底是一种怎样的存在?
  18. eventhandler java_事件驱动模型的简单Java实现
  19. html防止恶意广告,如何拦截恶意网页和弹窗广告?解决方法
  20. 完了,BBQ了。上班打游戏 ,被 大BOSS发现了。

热门文章

  1. 349-git各阶段版本回退命令
  2. 车载测试-HIL硬件在环测试
  3. 增量备份、差异备份、增量备份的区别?
  4. App中根据多个字段检索功能总结
  5. 学计算机的,为什么要用linux?
  6. android onCreate与onCreateView的区别
  7. Default encoder for format image2 (codec png) is probably disabled. Please choose an encoder manuall
  8. SeekBarVolumizer.java
  9. Linux日志文件系统
  10. 惊闻企业Web应用生成平台 活字格 V4.0 免费了,不单可视化设计器免费,服务器也免费!...