【问题标题】:Fast way to save 2D array in c#在 C# 中保存二维数组的快速方法
【发布时间】:2020-12-04 19:45:56
【问题描述】:

我正在尝试在 Unity 游戏期间保存 2D 数组。我尝试使用 StreamWriter 将数组保存到 csv,虽然这可行,但它太慢了,游戏停止/崩溃了一秒钟。有没有更快的方法来保存数组?它不需要是 csv,只要我以后可以在 C# 中检索数组,我就可以在游戏后进行转换。

编辑 - 更多信息:我正在使用 Leap Motion 来跟踪用户的手部。我想在每一帧中保存每个手部骨骼(手掌 + 每根手指 3 根骨骼)的位置和旋转。

【问题讨论】:

  • 玩游戏期间是否需要保存?是否可以将其存储在内存中并在游戏的时间关键部分完成后保存?
  • 我们将作为最后的手段这样做。这是为了研究,我们正在尝试在整个游戏过程中保存数据,这样我们就不会在任何崩溃时丢失它。
  • 我建议研究事件溯源。如果您将状态视为更改的事件流,则只需附加到文件。有快照等概念来加速状态恢复。
  • 我是新手,所以我刚开始阅读有关事件溯源的内容,因为您发布了。我认为这可能不适用,但我会感谢您对此的反馈!我正在使用 Leap Motion 来跟踪用户的手部。我想在每一帧保存每个手骨(手掌+每个手指 3 个骨头)的位置和旋转。你认为这种技术还能用吗?
  • 如果二维数组很大(占用大量内存),您还可以查看持久化memory-mapped files。如果你打开一个持久化到磁盘的内存映射文件,你可以以虚拟内存的速度操作它的数据,但数据最终会存在于磁盘上。如果可以的话,减少保存到磁盘的大小(正如@Jason 所了解的那样)可能会更好。

标签: c# arrays performance unity3d save


【解决方案1】:

对于 Unity 2017 及更高版本,您可以尝试将数据保存在不同的线程中。但是,由于您将在每一帧都执行此操作,因此您还需要实现一个排队系统,以防止 frame x+nframe x 之前保存,如果 frame x 的保存滞后。

您可以检查这些资源作为开始:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2013-07-12
    相关资源
    最近更新 更多