2

我一直在用 javascript/jquery 构建Conway's Life,以便在浏览器Here中运行它。Chrome、Firefox 和 Opera 或 Safari 执行此操作的速度非常快,因此最好不要为此使用 IE。不过IE9还可以。在生成新一代生命的同时,我存储了前几代,以便能够回顾历史。这工作正常,直到内存填满的某个点,这使得浏览器(选项卡)崩溃。

所以我的问题是:如何检测内存何时填满?我将每一代的数组存储在一个形成世代历史的数组中。这会占用大量内存,这会在几千代后使浏览器崩溃,具体取决于可用内存。我知道javascript无法检查可用内存量但必须有办法......

4

2 回答 2

7

我怀疑有没有办法做到这一点。即使有,它也可能是特定于浏览器的。不过,我可以建议一种不同的方式。

与其存储每一代的所有数据,不如存储每隔一段时间拍摄的快照。由于 Conway 的生命游戏是确定性的,您可以轻松地从给定的快照重新生成未来的帧。您可能希望保留几帧的缓冲区,以便您可以使倒带更流畅。

实际上,这实际上并不能解决问题,因为您最终会用完空间。但是,如果您存储每一n帧,您的应用程序将持续n更长的时间,这可能就足够长了。我建议您对可以倒带的过去时间施加一些硬性限制,以便对必须存储的数量有一个上限。确定将是多少帧(10 分钟,30 FPS = 18000 frames)。然后,除以frames您可以存储的帧数(分析各种网络浏览器以解决此问题),这就是您应该使用的快照之间的间隔。

于 2011-03-17T23:44:05.257 回答
0

Dogbert 几乎做到了。您无法确切知道有多少可用内存,但您可以知道您的数据集可能有多大。

因此,取存储在数组中的每个对象的大小,乘以数组维度,这就是一次迭代的大小。将其乘以所需的迭代次数以查看总共需要多少空间,并进行相应调整。

或者,受 Travis 的启发,简单地从最后一个已知数组反向运行模式。毕竟是确定性的。

于 2011-03-17T23:44:45.083 回答