多次运行后的JavaScript崩溃
问题描述:
我有一个WebGL画布,其中包含大约90k顶点的某处,然后是一些'活动'文件,它们基本上告诉每个'时间步骤'每个顶点应该具有什么颜色。这个活动被分割成多个“块”,每个块存储在一个单独的文件中。从一个文件中的活动已经过去后,我读了新的名字:多次运行后的JavaScript崩溃
activitiesData = null;
activitiesData = nextActivitiesFileData.slice(0);
这里nextActivitiesFileData
是asyncronously通过Ajax调用读取。现在,所有这些在第一次运行时都可以正常工作,有时甚至可以进行更多运行,但是在第二次运行间隔 - 第十次运行间隔期间,它会崩溃。 现在我认为这是由于所使用的非常大的数据在某种程度上不够快。我一直试图保证使用var
并将不需要的数组分配到null
。
有什么我可以做的,试图'帮助'的垃圾收集过程?这次撞车会有其他性质吗?
答
如果我理解你的问题,你有没有足够快地释放GPU上的数据的问题?
有两种方法可以释放WebGL API分配的内存。 如果通过gl.createBuffer()创建一个WebGLBuffer对象,则只有当JavaScript对象被垃圾回收(不再有对该对象的任何引用)时才会自动释放实际缓冲区,但此过程很难预测。
根据最新的规范http://www.khronos.org/registry/webgl/specs/latest/#5.14.5,大多数WebGL对象类型都有“删除器”,以便程序员更好地控制内存。 尝试在不再需要缓冲区时调用void deleteBuffer(WebGLBuffer? buffer)
方法。
但是,如果你有任何机会有CPU内存不足的问题,我为这个无关的答案道歉。
当你说“崩溃”,你的意思是整个浏览器崩溃和关闭?或者您的意思是由于javascript错误,网页中的JavaScript停止运行? – jfriend00 2012-02-02 14:40:13
浏览器很好,只有javascript停止运行,并且webgl画布全黑。 – Bogdan 2012-02-02 14:44:38
浏览器是否报告错误控制台或调试控制台中的任何JS错误? – jfriend00 2012-02-02 14:47:07