微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在制作一个2D平台游戏并代表我正在使用2D数组的瓦片,这些瓦片是具有位置,类型和各种标志字段的类.当我将tile类中的类关键字更改为struct时,加载的地图消耗的内存减少约20%.

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

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

解决方法

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

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

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

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

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

原文地址:https://www.jb51.cc/csharp/97262.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐