【发布时间】:2012-07-02 10:35:08
【问题描述】:
我在所有经过测试的浏览器上都发现了这一点——Windows 上的 IE、Firefox、Chrome 和 Safari 以及 Apple 上的 Safari。
据称,浏览器刷新、后退按钮或转发链接应该转储浏览器节点和 javascript 变量和对象等。这似乎不适用于 WebGL。我在开发需要大约 100MB 到 200MB 内存的复杂 WebGL 应用程序时首先注意到它。在开发过程中,我必须进行大量刷新,并且我的计算机会在 5-10 次刷新后开始变慢并死机。
经过一些研究,我意识到这不应该。内存泄漏的公认解决方案是刷新应该释放所有 javascript 对象和变量以及 dom 节点的页面。但请看以下图片:
那么这里的交易是什么?在小型应用程序上没有注意到,但对于像我这样的大型 WebGL 应用程序 (orbitingeden.com),这是一个真正的问题,我的用户会认为该软件比实际情况更消耗资源。下图显示这些刷新吞噬了我所有的可用内存,因此垃圾收集不起作用和/或 JS 和 DOM 对象没有被释放:
(来源:orbitingeden.com)
有人知道强制浏览器进行真正的内存转储的技巧吗?为什么所有的文档都错了?
【问题讨论】:
-
@gman:如果你回答这个问题,我会给你功劳。概要:WebGL 使用由域和选项卡保留的上下文,与特定页面(刷新)无关。因此,在用户离开基本域或关闭选项卡之前,不会释放分配给 WebGL 渲染的任何内存用于垃圾回收。一种可能的解决方法是向应用程序添加一个退出按钮,该按钮可以快速重定向到一个新的域,然后重新重定向。
-
该错误将在任何一天得到修复,因此希望很快不需要解决方法。在 webgl 一致性测试中实际上有一个测试 (cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/…)
-
我的 webgl 在页面刷新时的行为方式相同并没有释放内存。 (softwareengineering.stackexchange.com/questions/389264/…)
标签: javascript dom memory-leaks webgl page-refresh