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

前端之家收集整理的这篇文章主要介绍了c# – 为什么类数组比结构数组消耗多20%的内存?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_1@我正在制作一个2D平台游戏并代表我正在使用2D数组的瓦片,这些瓦片是具有位置,类型和各种标志字段的类.当我将tile类中的类关键字更改为struct时,加载的地图消耗的内存减少约20%.

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

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

解决方法

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

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

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

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

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

原文链接:https://www.f2er.com/csharp/97262.html

猜你在找的C#相关文章