我不确定这是多么有效,为每条信息设置一个数组似乎并不具有内存效率。
简短回答:您可以使用 Structs 作为替代方案 - 它可以通过简单地“将所有内容存储在一起”来摆脱额外的数组。
长答案:
数组的表示形式如下:
Header:Data
其中标头是 4 字节的 Int32。
目前,您的存储可能如下所示:
IIII:B:B:B //Byte array (e.g. alpha level)
IIII:SS:SS:SS //Short array (e.g. num times clicked)
IIII:B:B:B //Byte array
其中 I、B 和 S 分别代表 Int、Byte 和 Short 的一个字节。使用 Struct,您可以将它们全部存储在一起 - 如下所示:
IIII:BSSB:BSSB:BSSB
如果您使用类而不是它看起来非常不同,因为类存储在数组中作为对数据位置的引用:
IIII:RRRR:RRRR:RRRR
BSSB //These can be stored anywhere in memory
BSSB //These can be stored anywhere in memory
BSSB //These can be stored anywhere in memory
因此,虽然结构可以节省一些内存,但并不是很多。使用类实际上会消耗你的记忆!但是,它使用的内存不必是连续的,这在存储大量大数据组(例如总计 1GB+)时会有所帮助,尤其是。在 32 位机器上……不过那是另一天的讨论。
当然,这纯粹是在讨论内存大小效率,如果您的工作负载在逐个字段的基础上进行计算,那么单个数组将更加缓存友好 - 因此效率更高。相反,如果您倾向于逐块地进行计算,那么反之亦然。类对于原始存储效率低下,但如果它们适合您的编码范式,可能会使开发更加容易。此外,当许多对象需要引用相同的数据时,类是很好的——它甚至可以通过减少重复来节省内存!
希望这会有所帮助,因为您可以看到对基础知识的良好理解会有所帮助。然而,最重要的是珍惜您的时间,以及是否/何时性能成为您自己的问题测试和基准!
免责声明:早上写的,可能有错误/有遗漏等。