大家好,感谢您的时间。我在使用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的行,则没有泄漏。所以我想必须有一个我没有清理的参考。正确?
答案 0 :(得分:0)
Chrome的任务管理器可能不是您可以使用的最可靠的工具。他们甚至整合了一条消息"注意:此页面将显示所有正在运行的浏览器的内存使用情况,而不仅仅是Chrome。 (错误:我们严重超出了我们自己的内存使用量:问题25454.)"
尝试使用Chrome dev tools(Windows上的F12; Mac上的cmd + opt + i)。打开时间线选项卡并记录约10-20秒。它应该可以帮助您缩小任何泄漏范围。 FWIW,当我这样做时,我没有发现泄漏。