node.js读取文件内存泄漏

我使用node.js来每秒读取一个图像。 这个想法是以后推到networking浏览器,使它成为一个简单的stream。 代码如下所示:

var fs = require("fs"); var intervalTimerObj; function startStream() { if(!intervalTimerObj) { intervalTimerObj = setInterval( updateStream , 1000); } } function updateStream(){ fs.readFile( __dirname + "/pic.jpg", function(err, image) { }); } startStream(); 

当运行上面的代码时,我的内存很快就填满了,似乎得到了内存泄漏。 我加载的图像文件越大,填满的速度越快。

我究竟做错了什么? 有什么方法来释放图像variables? 我试过将它归零。

这是一个更好的方法。 setInterval()不应该在这里使用,因为它可能导致同时执行相同的任务。 使用setTimeout()来代替。 理想的地方是在readFile()的callback中:

 var fs = require("fs"); var timeoutHandle = null; function startTimeout() { stopTimeout(); timeoutHandle = setTimeout(updateStream, 1000); } function stopTimeout() { clearTimeout(timeoutHandle); } function updateStream(){ fs.readFile( __dirname + "/pic.jpg", function(err, image) { // ... startTimeout(); // Make sure this line is always executed }); } startTimeout(); 

处理之后,你还需要确保你没有任何对image引用,否则V8的垃圾收集器将不会释放图像数据,从而泄漏内存。

尝试这个

 function startStream() { if(!intervalTimerObj) { intervalTimerObj = setTimeout( updateStream , 1000); } } function updateStream(){ fs.readFile( __dirname + "/pic.jpg", function(err, image) { //OK file is read //do yoyr stuff with it.... // Now start next read startStream() }); } startStream();