使用getImageData时内存泄漏

时间:2015-09-13 22:59:19

标签: javascript canvas html5-canvas

大家好,感谢您的时间。我在使用getImageData时遇到了问题。这是一些示例代码。

function readImage()
{
    var test_image = new Image();
    test_image.src = "images/testImage.png";
    test_image.onload = function() 
    {
        var testCanvas = document.createElement( 'canvas' );
        if ( testCanvas.getContext ) 
        {
            testCanvas.width = test_image.width;
            testCanvas.height = test_image.height;
            var image_ctx = testCanvas.getContext( "2d" );
            image_ctx.drawImage( test_image, 0, 0 );
            var pix = image_ctx.getImageData( 0, 0, test_image.width, test_image.height ).data;

            pix = null;
            image_ctx = null;
            test_image = null;
            testCanvas = null;
        }
    }
}

updateMDPixelArray = setInterval(
    function()
    {
        readImage();
    }, 1000
);

当我在Chrome中运行此代码并打开Chrome任务管理器(Shift + Esc)时。它表明浏览器选项卡和GPU内存都在不断增加。在Firefox中也是如此。根据我对javaScript的了解,当对象不再被引用时,应该对它们进行垃圾回收。所有变量都是本地的。我不认为它有所帮助,但为了安全起见,我将所有变量设置为null。如果我删除使用getImageData的行,则没有泄漏。所以我想必须有一个我没有清理的参考。正确?

1 个答案:

答案 0 :(得分:0)

Chrome的任务管理器可能不是您可以使用的最可靠的工具。他们甚至整合了一条消息"注意:此页面将显示所有正在运行的浏览器的内存使用情况,而不仅仅是Chrome。 (错误:我们严重超出了我们自己的内存使用量:问题25454.)"

尝试使用Chrome dev tools(Windows上的F12; Mac上的cmd + opt + i)。打开时间线选项卡并记录约10-20秒。它应该可以帮助您缩小任何泄漏范围。 FWIW,当我这样做时,我没有发现泄漏。