问题起源:void DistpatchEvent(EventType, IEventData)

这里的 IEventData是一个接口,代表事件参数。

为了避免每次发送事件产生GC,决定事件参数使用struct,但struct不能继承,所以这里只能使用接口作为基类。

但将结构体传给接口时会发生装箱操作,产生GC。

public class testStructGC : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){var ot = new PlayerMoveCmd();ICmd ic = new PlayerMoveCmd();}// Update is called once per framevoid Update(){}
}

对应的IL代码,可以看到

ICmd ic = new PlayerMoveCmd(); 这一行产生了装箱操作
    .method private hidebysig instance void Start () cil managed {// Method begins at RVA 0x20b0// Code size 25 (0x19).maxstack 1.locals init ([0] valuetype PlayerMoveCmd ot,[1] class ICmd ic,[2] valuetype PlayerMoveCmd)// {IL_0000: nop// PlayerMoveCmd playerMoveCmd = default(PlayerMoveCmd);IL_0001: ldloca.s 0IL_0003: initobj PlayerMoveCmd// ICmd cmd = default(PlayerMoveCmd);IL_0009: ldloca.s 2IL_000b: initobj PlayerMoveCmdIL_0011: ldloc.2IL_0012: box PlayerMoveCmdIL_0017: stloc.1// }IL_0018: ret} // end of method testStructGC::Start


C# 接口持有结构体会导致装箱问题相关推荐

  1. UNIX网络编程读书笔记:套接口地址结构

    前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀 ...

  2. 技术实践丨如何解决异步接口请求快慢不均导致的数据错误问题?

    本文分享自华为云社区<如何解决异步接口请求快慢不均导致的数据错误问题?>,原文作者:Kagol . 引言 搜索功能,我想很多业务都会涉及,这个功能的特点是: 用户可以在输入框中输入一个关键 ...

  3. JTAG接口的结构和时序分析

    JTAG接口的结构和时序分析 转载于:https://www.sunev.cn/embedded/567.html

  4. Java内存泄露系列--内部类持有外部类导致内存泄露--原因/解决方案

    原文网址:Java内存泄露系列--内部类持有外部类导致内存泄露--原因/解决方案_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java内部类持有外部类导致内存泄露的原因以及其解决方案. 为什么内部 ...

  5. JQuery1.11版本对prop和attr接口的含义分离导致问题分析

    问题背景 实验中, 在jquery1.7版本, attr("value")  和 val() 接口获取 input 控件的值, 都是一致的, 都是当前控件值. 但是 jquery1 ...

  6. s-video接口_S-Video电缆会导致癌症吗?

    s-video接口 Depending on where you live, you may receive a health warning when purchasing some hardwar ...

  7. Python3调用百度地图API接口获取结构化地址

    在实际应用中,我们也许会有这样的需求,输入一个地名,就能够知道这个地方的准确地址.例如输入"清华大学",我们就可以知道清华大学在北京的哪个区哪条道路.正好百度地图开放平台服务提供了 ...

  8. 使用PHP开发App接口的一些体会

    前言 做了1年半的PHP开发,对PHP写接口的一些注意事项和心得体会也是有一些的.有空就写下来分享一下,大部分参考别人的一些建议. 文档要写周全,需要的每个字段,规定是什么类型,什么含义要标柱清楚,写 ...

  9. php接口三结构,grape动态PHP结构(三)——API接口

    一.app视图与控制器 1)路由 这里的v1.v2就是模块,由于客户端版本一直在迭代的,那么一些老版本的客户端调用的接口就得保留起来,使得兼容.新版本就直接调用新接口. 还有一种是写html页面,在客 ...

最新文章

  1. 风口上的政府大数据 需要消除“大误区”
  2. java byte array_Java IO: ByteArray和Filter
  3. 大型网站运维工程师的职责和前景
  4. Deepin/Linux系统使用GUFW可视化管理、配置防火墙规则
  5. Linux 下 GitLab 安装教程
  6. 操作 神通数据库_国产数据库最好的时代
  7. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 Fishing Master
  8. 零基础学python-5.6 数字位操作与其它工具
  9. 绘制隐藏层的激活值的分布[直方图]
  10. linux c 获取文件数量
  11. 如何在程序中画出实际大小为7CM半径的圆
  12. php Apache配置伪静态的介绍
  13. uniapp开发微信小程序教程(一)
  14. RecyclerView点击某个条目保持选中
  15. 【30-60s计数器电路设计】数电课设
  16. 【文献调研】SLAM方向综述性论文
  17. vue图片懒加载插件vue-lazyload监听加载失败事件的解决方案
  18. 给已经创建的容器暴漏端口 添加新的端口
  19. 输入框实时字数计算移动端bug解决
  20. 写在2021最后一天

热门文章

  1. redis.conf 配置项说明
  2. 信息系统项目管理师-项目集、项目组合管理核心知识点思维脑图
  3. Eclipse中怎样修改jar包的源码并将原jar包替换
  4. ElementUI中el-select请求springboot后台数据显示下拉项并在el-table中格式化显示
  5. C#中使用Process调取Windows中的进程(应用程序)
  6. Linux-下载传输并安装启动Tomcat
  7. Linux-通过XShell使用sz命令提示找不到
  8. MyBatisPLus入门项目实战各教程目录汇总
  9. POI实现Excel导出时常用方法说明
  10. 学习VUE时,利用webpack打包的错误处理方法