加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么类数组比结构数组消耗多20%的内存?

发布时间:2020-12-15 18:01:02 所属栏目:百科 来源:网络整理
导读:我正在制作一个2D平台游戏并代表我正在使用2D数组的瓦片,这些瓦片是具有位置,类型和各种标志字段的类.当我将tile类中的类关键字更改为struct时,加载的地图消耗的内存减少约20%. 我不知道这个动作的正确与否,我只是想知道为什么内存消耗的差异. 编辑:数字为
我正在制作一个2D平台游戏并代表我正在使用2D数组的瓦片,这些瓦片是具有位置,类型和各种标志字段的类.当我将tile类中的类关键字更改为struct时,加载的地图消耗的内存减少约20%.

我不知道这个动作的正确与否,我只是想知道为什么内存消耗的差异.

编辑:数字为1038 MB,瓦片为类,845 MB为结构(没有大部分游戏数据).

解决方法

对象数组实际上是一个引用数组,对象存储在堆上.

这意味着引用有4或8个字节的开销(取决于x86或x64),然后堆上的每个对象都有8或16个字节的开销.

在结构数组中,struct值直接存储在数组中,因此不会产生额外的开销.

因此,如果您的数据是例如48个字节,则额外的12个字节(在x86模式下)将是所用总内存的20%的开销.

请注意,它们的使用方式也有所不同.如果您移动切片或将其作为参数发送到方法,则在使用结构时将复制所有数据,但如果使用类,则仅复制引用.如果你可以保持结构小于16个字节,性能差异很小,但如果它更大,你可以通过使用类来获得更快的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读