2012-07-17 36 views
2

我决定最好的办法了很多时间序列数据存储在内存中,我做了一个简单的基准来比较缓冲区VS简单数组:为什么数组的内存少于node.js中的缓冲区?

var buffers = {}; 

var started = Date.now(); 
var before = process.memoryUsage().heapUsed; 

for (var i = 0; i < 100000; i++) { 
    buffers[i] = new Buffer(4); 
    buffers[i].writeFloatLE(i+1.2, 0); 
// buffers[i] = [i+1.2]; 
} 

console.log(Date.now() - started, 'ms'); 
console.log((process.memoryUsage().heapUsed - before)/1024/1024); 

而且结果如下:

Arrays: 22 'ms' 
8.391242980957031 

Buffers: 
123 'ms' 
9.9490966796875 

所以根据这个基准,阵列速度提高5倍以上,内存减少18%。它是否正确?我当然期望缓冲区占用更少的内存。

+1

它看起来像一个关联数组(图),在它小的缓冲器。数组代码在哪里? – 2012-07-17 09:27:30

+0

@Linus G Thiel,我正在取消评论字符串的注释并在测试数组时对注释2进行评论 – Fluffy 2012-07-17 09:30:56

+0

对于我来说,有一张带有1长度数组的地图似乎很奇怪。这是你的用例吗? – 2012-07-17 09:32:55

回答

0

您创建的每个缓冲区都有一定的开销(时间和空间)。

我想你会得到更好的空间(也许时间)的性能,如果你比较

buffers[i] = new Buffer(4*1000); 
for(k=0;j<1000;++j) 
{ 
    buffers[i].writeFloatLE(i+k+1.2, 4*j); 
} 

随着

buffers[i] = []; 
for(k=0;j<1000;++j) 
{ 
    buffers[i].push(i+k+1.2); 
}