2
下面是代碼的NodeJS爲例:爲什麼readdirSync方法在使用大量文件讀取目錄時會佔用大量內存?
var fs = require('fs');
function toMb (byteVal) {
return (byteVal/1048576).toFixed(2);
}
console.log('Memory usage before "readdirSync" apply: ', toMb(process.memoryUsage()['heapUsed']) + ' MB');
fs.readdirSync('./parseLogFiles/reports');
console.log('Memory usage after "readdirSync" apply: ', toMb(process.memoryUsage()['heapUsed']) + ' MB');
目錄 「報告」 包含300.000文件。
我已經得到了以下結果:
Memory usage before "readdirSync" apply: 2.01 MB
Memory usage after "readdirSync" apply: 22.38 MB
爲什麼內存使用增加了超過10倍(2.01 VS 22.38)?
對於「readdir」我有同樣的結果。
又如:
var fs = require('fs');
function toMb (byteVal) {
return (byteVal/1048576).toFixed(2);
}
console.log('Memory usage before "readdirSync" apply: ', toMb(process.memoryUsage()['heapUsed']) + ' MB');
var filesList = fs.readdirSync('./parseLogFiles/reports');
console.log('Memory usage after "readdirSync" apply: ', toMb(process.memoryUsage()['heapUsed']) + ' MB');
console.log('Files list size: ', toMb(Buffer.byteLength(filesList.join(''))) + ' MB');
我已經得到了以下結果:
Memory usage before "readdirSync" apply: 2.01 MB
Memory usage after "readdirSync" apply: 22.38 MB
Files list size: 11.13 MB
從哪裏9,24Mb來(22.38 - 11.13 - 2.01)的?
嘗試公開垃圾回收器('node --expose_gc')並在'fs.readdirSync()'之後調用'global.gc()'來查看是否有所作爲。 – robertklep 2015-04-06 13:35:19
@robertklep。感謝您的回覆。是的,global.gc()清除了內存。 – Carl 2015-04-07 10:26:49