【发布时间】:2012-08-12 03:00:12
【问题描述】:
我正在制作一个 2D 平台游戏,为了表示一个级别,我使用了 2D 瓦片数组,这些瓦片是具有位置、类型和各种标志字段的类。当我将 tile 类中的 class 关键字更改为 struct 时,加载的地图消耗的内存减少了大约 20%。
我不知道这个动作的对错,我只想知道为什么内存消耗的差异。
编辑:数字为 1038 MB,其中 tile 作为类,845 MB 作为结构(没有大部分游戏数据)。
【问题讨论】:
-
因为 .Net 结构比 .Net 类“更轻”。 20%似乎有点过分了。但是创建(例如)“类”对象的 1,000K 实例将比创建等效“结构”对象的 1,000K 实例使用更多的内存......
-
看起来您可能正在考虑使用可变结构(如果我理解“标志”变量)。为了你自己的理智,不要。 stackoverflow.com/questions/441309/why-are-mutable-structs-evil
-
这里有大量关于类与结构的信息:stackoverflow.com/questions/521298/when-to-use-struct-in-c
-
您的 20% 数字很难解释,因为您没有告诉我们每个结构中有多少字节的有效负载。
-
1GB 用于游戏中的瓦片基础地图无论如何都有些愚蠢。