C# 接口持有结构体会导致装箱问题
问题起源: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# 接口持有结构体会导致装箱问题相关推荐
- UNIX网络编程读书笔记:套接口地址结构
前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀 ...
- 技术实践丨如何解决异步接口请求快慢不均导致的数据错误问题?
本文分享自华为云社区<如何解决异步接口请求快慢不均导致的数据错误问题?>,原文作者:Kagol . 引言 搜索功能,我想很多业务都会涉及,这个功能的特点是: 用户可以在输入框中输入一个关键 ...
- JTAG接口的结构和时序分析
JTAG接口的结构和时序分析 转载于:https://www.sunev.cn/embedded/567.html
- Java内存泄露系列--内部类持有外部类导致内存泄露--原因/解决方案
原文网址:Java内存泄露系列--内部类持有外部类导致内存泄露--原因/解决方案_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java内部类持有外部类导致内存泄露的原因以及其解决方案. 为什么内部 ...
- JQuery1.11版本对prop和attr接口的含义分离导致问题分析
问题背景 实验中, 在jquery1.7版本, attr("value") 和 val() 接口获取 input 控件的值, 都是一致的, 都是当前控件值. 但是 jquery1 ...
- s-video接口_S-Video电缆会导致癌症吗?
s-video接口 Depending on where you live, you may receive a health warning when purchasing some hardwar ...
- Python3调用百度地图API接口获取结构化地址
在实际应用中,我们也许会有这样的需求,输入一个地名,就能够知道这个地方的准确地址.例如输入"清华大学",我们就可以知道清华大学在北京的哪个区哪条道路.正好百度地图开放平台服务提供了 ...
- 使用PHP开发App接口的一些体会
前言 做了1年半的PHP开发,对PHP写接口的一些注意事项和心得体会也是有一些的.有空就写下来分享一下,大部分参考别人的一些建议. 文档要写周全,需要的每个字段,规定是什么类型,什么含义要标柱清楚,写 ...
- php接口三结构,grape动态PHP结构(三)——API接口
一.app视图与控制器 1)路由 这里的v1.v2就是模块,由于客户端版本一直在迭代的,那么一些老版本的客户端调用的接口就得保留起来,使得兼容.新版本就直接调用新接口. 还有一种是写html页面,在客 ...
最新文章
- 风口上的政府大数据 需要消除“大误区”
- java byte array_Java IO: ByteArray和Filter
- 大型网站运维工程师的职责和前景
- Deepin/Linux系统使用GUFW可视化管理、配置防火墙规则
- Linux 下 GitLab 安装教程
- 操作 神通数据库_国产数据库最好的时代
- 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 Fishing Master
- 零基础学python-5.6 数字位操作与其它工具
- 绘制隐藏层的激活值的分布[直方图]
- linux c 获取文件数量
- 如何在程序中画出实际大小为7CM半径的圆
- php Apache配置伪静态的介绍
- uniapp开发微信小程序教程(一)
- RecyclerView点击某个条目保持选中
- 【30-60s计数器电路设计】数电课设
- 【文献调研】SLAM方向综述性论文
- vue图片懒加载插件vue-lazyload监听加载失败事件的解决方案
- 给已经创建的容器暴漏端口 添加新的端口
- 输入框实时字数计算移动端bug解决
- 写在2021最后一天
热门文章
- redis.conf 配置项说明
- 信息系统项目管理师-项目集、项目组合管理核心知识点思维脑图
- Eclipse中怎样修改jar包的源码并将原jar包替换
- ElementUI中el-select请求springboot后台数据显示下拉项并在el-table中格式化显示
- C#中使用Process调取Windows中的进程(应用程序)
- Linux-下载传输并安装启动Tomcat
- Linux-通过XShell使用sz命令提示找不到
- MyBatisPLus入门项目实战各教程目录汇总
- POI实现Excel导出时常用方法说明
- 学习VUE时,利用webpack打包的错误处理方法