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

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

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

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

解决方法

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

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

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

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

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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...