问题起源: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. Installing PowerShell Management Library for windows server 2008
  2. java实现人字拼,地板怎么玩花式人字拼铺法 人字拼地板家居实例图
  3. Vcenter一次性将服务器四个网卡从端口组迁移到分布式交换机的方法
  4. Spring boot(六):如何优雅的使用mybatis
  5. Golang——多种运算符及优先级
  6. 关于js中正则表达式链接
  7. 富士康java应届生工资待遇_应届毕业生入职富士康渠道不一样,收入相差悬殊...
  8. 详解mysql事务_详解MySQL执行事务的语法和流程
  9. 基于模糊集的图像增强
  10. 2020长安杯网站重构
  11. ROS语音交互系统_(2)利用讯飞TTS实现ROS下语音合成播报
  12. 计算机英语教学设计,英语教学设计doc范文精选
  13. [ECCV2020]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
  14. The transaction timeout is larger than the maximum value allowed by the broker
  15. ML之lightgbm.sklearn:LGBMClassifier函数的简介、具体案例、调参技巧之详细攻略
  16. TFTP和Syslog
  17. 名帖105 赵孟頫 楷书《玄妙观重修三门记》
  18. 学习牛津书的免费网站
  19. 好牛逼的技术——Android运行时Crash自动恢复框架:Recovery
  20. 专题05-python操作微信(wxpy)

热门文章

  1. 笔记-项目风险管理-复习要点
  2. Leaflet中使用Leaflet.Polyline.SnakeAnim插件实现水流模拟效果
  3. Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
  4. 若依(基于SpringBoot的权限管理系统)集成MobileIMSDK实现IM服务端的搭建
  5. Android中设置RecyclerView的每一个item的单项点击事件
  6. Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源
  7. POI实现Excel导出时常用方法说明
  8. linux服务器上部署项目,还报路径错误,切记分隔符注意点
  9. flutter中state详解
  10. python 解析xml格式_Python解析XML文件