一种避免浪费记忆的方法

Ian*_*ray 5 c# xna

目前,我已经有了一个系统,我在一个结构中记录一个游戏手柄状态,并将其存储在一个状态列表中,以记录视频游戏持续时间的输入.垫的完整状态每帧占用192位,但这有点浪费.例如,如果没有按下打击垫上的模拟触发器,它们仍然需要存储32位.显然我希望节省一些空间.

我曾尝试将其设置为NULL,但它似乎对系统在匹配结束时保存的二进制文件的大小没有影响.

在您只需要记录或保存某些值但保留数据结构的完整性的情况下,有哪些替代方案可用?

编辑:

我想我找到了解决方案; 各种各样的.之前我尝试通过在struct中使用System.Nullable覆盖标准float来尝试将值设置为NULL.我的想法是在结构中将其设置为NULL值将序列化更小.我的印象是NULL被记录为4位.它可能更多,它可能是.无论如何,我之前的代码有一个相当明显的错误,所以我已经回去修复它了.现在我得到了更小的重放,准确性似乎也一样好,所以我假设NULL技巧正在做正确的事情.

Joh*_*ren 1

这是你做的。

您使用位流仅写入产生影响的信息位。如果您有大量稀疏数据,您可以先写出一个位掩码,告诉您以下哪些位包含数据。

这样,像向量这样的东西就可以减少到只有 3 个零位。如果向量为空/零。如果向量中只有一个分量有效,则为 3 位 + 仅该分量的大小。除此之外,您当然可以添加压缩,但是,在某些时候,位的分布(当您对此进行切割时)变得非常均匀。这使得通用压缩方法不太理想,甚至可能会增加输出的大小。

你所做的就是定期将这些内容写入磁盘,这样你就不会在内存中保留大量内容。