2012-07-17 61 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); 
}