node.js 使用数组消耗大量内存

node.js is consuming much ram by using an array

我正在使用 node.js 和 io.socket 编写聊天记录,该聊天记录应保存所有消息并向他们显示两个新用户。 消息存储在一个对象数组中。 当我用 2MB(复制并粘贴到 .txt 中)测试它时,我的任务管理器显示 node.js 需要大约 200MB!从一开始就没有消息,它需要 ~19MB。 所以我问我的代码中是否存在任何内存泄漏,或者 socket.io 通过在第二个数组中每次使用 .emit 来保存数组?

这是我的代码:

save_object=new Array();
save_object['chat']=new Array();//for the chat room,now there's just this one

io.sockets.on('connection', function (socket) {
// client is connected
socket.emit('chat', { time: new Date(), text: 'you are now connected
to the server!' });
//send all msgs on start
socket.emit('all',save_object['chat']);
// user-send event
socket.on('chat', function (data) {
// send msg
io.sockets.emit('chat', { time: new Date(), 
name: data.name || 'anonymous',  text: data.text });
  //save new msg to the array
  save_object['chat'][save_object['chat'].length]=
  new Object({ time:new  Date(), name: data.name || 'anonymous', 
  text: data.text });
});
});

我不能确切地告诉你为什么这会占用这么多内存,但我认为使用数组来保存历史是个坏主意...... 您至少应该使用一个文件,并在读取它的同时发送消息(以避免内存中同时存在每条消息),或者使用数据库来存储它们(如果您需要请求时间戳)。 .. 文件解决方案不是很难写而且危险性会小一些...

(顺便说一句,我不认为你的代码中有任何内存泄漏......但是你会明白数组肯定会分配更多它需要的space,并且你的对象'由于节点的原因,存储将比简单文件占用更多的空间,例如用于索引)