【问题标题】:ScriptProcessorNode Memory leakScriptProcessorNode 内存泄漏
【发布时间】:2014-08-06 18:50:49
【问题描述】:

我正在处理一个严重依赖网络音频和 ScriptProcessorNodes 的大型项目。在最近的一些间歇性崩溃之后,我找到了 ScriptProcessorNodes 内存泄漏的问题。我已经阅读了很多教程、指南、错误报告等,但似乎都没有帮助。这是一个小玩具示例:

http://jsfiddle.net/6YBWf/

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%,但从未低于此值。谁能给我看一个与此类似的示例,其中节点被正确收集?我有什么明显的遗漏吗?

【问题讨论】:

  • 为什么一次有这么多节点,而且只有 100 毫秒?非玩具示例是否也会产生静态?
  • 嗨 Andrew,这是一个更大问题的玩具示例。我永远不会一次真正分配那么多节点。相反,我在一个较大的项目中遇到了内存泄漏问题,其中许多项目是在很长一段时间内分配的。这最终会导致标签崩溃。我相信这可能是 Chrome 中的一个错误,我在 [这里] (code.google.com/p/chromium/issues/…) 提交了一个错误报告如果有人确认我会给出答案

标签: memory-leaks web-audio-api


【解决方案1】:

这已在 Chrome 中确认为回归:

https://code.google.com/p/chromium/issues/detail?id=379753

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    • 2019-08-10
    • 2013-06-24
    • 2011-03-22
    • 2015-04-20
    相关资源
    最近更新 更多