由于功能代码的定义尽可能地避免了可变性,因此可以通过展开先前的状态来编写有状态的程序。所以,我在F#中完全用功能风格编写游戏,当然游戏往往有很多很多状态。我基本上使用游戏对象(如玩家)的记录,我只是映射所有这些状态以获得下一个状态。这很好用。但是,随着我的游戏变得越来越结构复杂,我担心它会因为复制每次更新而变得迟钝。我想知道如何在将来尝试避免这些陷阱(不是这一刻,因为它还不是一个问题)。
那么在F#不为我做的功能样式中是否有任何重要的优化,特别是当只有一小部分可能被更改时复制大块数据?另外,F#有什么东西可以用同样的方式对我有利吗?
还有一件事 - 这是我的两个主要问题,甚至可能都不是真的。我很想让这些理顺:
垃圾收集。由于我最终每秒复制数千条记录,所以必须有大量的对象生成,所有这些都是非常短暂的,因为我只是扔掉旧状态。这似乎是每隔一秒左右游戏中短暂但几乎没有明显跳跃的可能原因。
F#在复制除了几个字段以外的所有字段的记录时是否有效?如果不是,我怎样才能提高效率呢?
答案 0 :(得分:4)
因此在功能中使用了任何重要的优化 F#不为我做的风格,特别是与复制大相关 只有一小部分可能被改变时的数据块?
您是否真的要复制“大块数据”?
通常,不可变数据结构的优点是您不需要复制它们。例如,如果您有一个功能性地图,您可以“更新”一些数据,但大多数数据保持不变,并在旧地图和新地图之间共享,以及地图本身的较大部分。