Here is an example of NodeJS code (synchronous version):
var fs = require('fs');
var path = './parseLogFiles/reports';
var counter = 0;
var totalFileSize = 0;
var fileName;
var fullPath;
function toMb (byteVal) {
return (byteVal / 1048576).toFixed(2);
}
var filesList = fs.readdirSync(path);
console.log('Memory usage before files read:', toMb(process.memoryUsage()['heapUsed']) + ' MB');
for (var i = 0, len = filesList.length; i < len; i++) {
fileName = filesList[i];
if (fileName) {
fullPath = path + '/' + fileName;
totalFileSize += fs.statSync(fullPath)['size'];
try {
fs.readFileSync(fullPath, {encoding: 'utf8'});
} catch(err){
console.log('err: ', err);
}
}
}
console.log('Memory usage after files read:', toMb(process.memoryUsage()['heapUsed']) + ' MB');
console.log('Total files size:', toMb(totalFileSize) + ' MB');
I have got the following results:
Memory usage before files read: 22.45 MB
Memory usage after files read: 23.31 MB
Total files size: 258.19 MB
Here is asynchronous version:
...
for (var i = 0, len = filesList.length; i < len; i++) {
fileName = filesList[i];
if (fileName) {
fullPath = path + '/' + fileName;
(function(fullPath){
fs.stat(fullPath, function(err, stat){
totalFileSize += stat['size'];
fs.readFile(fullPath, {encoding: 'utf8'}, function(){
if (++counter === len) {
console.log('Memory usage after files read:', toMb(process.memoryUsage()['heapUsed']) + ' MB');
console.log('Total files size:', toMb(totalFileSize) + ' MB');
}
});
});
})(fullPath);
}
}
I have got the following results:
Memory usage before files read: 22.45 MB
Memory usage after files read: 437.88 MB
Total files size: 258.19 MB
Why does it happen (23.31 MB vs 437.88 MB)?
Aucun commentaire:
Enregistrer un commentaire