我正在开发一个大量依赖Web音频和ScriptProcessorNodes的项目。在最近的一些间歇性崩溃之后,我已经跟踪了从ScriptProcessorNodes泄漏内存的问题。我已经阅读了许多教程,指南,错误报告等等。但似乎没有任何帮助。这是一个小玩具示例:
var context = new webkitAudioContext();
function killNode(node)
{
return function()
{
node.disconnect();
node.onaudioprocess = null;
node = null;
}
}
function noise()
{
var node = context.createScriptProcessor(1024, 0, 1);
node.onaudioprocess = function(e)
{
var output = e.outputBuffer.getChannelData(0);
for(var i = 0; i < 1024; ++i)
{
output[i] = (Math.random() * 2 - 1) * 0.001;
}
}
node.connect(context.destination);
setTimeout(killNode(node), 100);
}
function generateNoise()
{
for(var i = 0; i < 99999; ++i)
{
noise();
}
}
generateNoise();
这将启动许多节点,然后断开它们并将其onaudioprocess设置为null。从我读过的内容来看,鉴于我没有保留对它们的任何引用,它们不应该被垃圾收集吗?
我的计算机内存会上升到大约16%,稍后会降低到14%,但永远不会低于此水平。任何人都可以给我一个类似于这个节点得到正确收集的例子吗?有什么明显的东西我不见了吗?