2012-02-02 62 views
1

我有一个WebGL画布,其中包含大约90k顶点的某处,然后是一些'活动'文件,它们基本上告诉每个'时间步骤'每个顶点应该具有什么颜色。这个活动被分割成多个“块”,每个块存储在一个单独的文件中。从一个文件中的活动已经过去后,我读了新的名字:多次运行后的JavaScript崩溃

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

这里nextActivitiesFileData是asyncronously通过Ajax调用读取。现在,所有这些在第一次运行时都可以正常工作,有时甚至可以进行更多运行,但是在第二次运行间隔 - 第十次运行间隔期间,它会崩溃。 现在我认为这是由于所使用的非常大的数据在某种程度上不够快。我一直试图保证使用var并将不需要的数组分配到null

有什么我可以做的,试图'帮助'的垃圾收集过程?这次撞车会有其他性质吗?

+0

当你说“崩溃”,你的意思是整个浏览器崩溃和关闭?或者您的意思是由于javascript错误,网页中的JavaScript停止运行? – jfriend00 2012-02-02 14:40:13

+0

浏览器很好,只有javascript停止运行,并且webgl画布全黑。 – Bogdan 2012-02-02 14:44:38

+0

浏览器是否报告错误控制台或调试控制台中的任何JS错误? – jfriend00 2012-02-02 14:47:07

回答

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内存不足的问题,我为这个无关的答案道歉。

相关问题