多次运行后javascript崩溃

时间:2012-02-02 14:28:45

标签: javascript garbage-collection webgl

我有一个WebGL画布,其中包含大约90k个顶点,然后是一些“活动”文件,它们基本上告诉每个'时间步'每个顶点应该有什么颜色。此活动分为多个“块”,每个“块”存储在单独的文件中。在一个文件的活动结束后,我读了一个新文件:

    activitiesData = null;
    activitiesData = nextActivitiesFileData.slice(0);

此处nextActivitiesFileData由ajax调用异步读取。现在所有这些在第一次运行时工作正常,有时甚至是一些更多的运行,但在第二次运行的某个地方 - >第10次运行间隔,它崩溃了。 现在我假设这是因为使用的非常大的数据在某种程度上没有足够快的吞噬。我一直小心翼翼地使用var并将不需要的数组分配给null

我可以做些什么来尝试'帮助'垃圾收集过程?这种崩溃可能是其他任何性质的吗?

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,那你就没有足够快的速度释放GPU上的数据了吗?

有两种方法可以释放WebGL API分配的内存。 如果通过gl.createBuffer()创建WebGLBuffer对象,则仅当javascript对象被垃圾收集时才会自动释放实际缓冲区(不再对该对象进行任何引用),但此过程很难预测。

根据最新的规范http://www.khronos.org/registry/webgl/specs/latest/#5.14.5,大多数WebGL对象类型都有“删除者”,以便程序员更好地控制内存。 当您不再需要缓冲区时,请尝试调用void deleteBuffer(WebGLBuffer? buffer)方法。

然而,如果你有任何机会在CPU端耗尽内存,我为这个无关的答案道歉。