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

时间:2015-02-06 20:51:12

标签: arrays node.js memory socket.io

我正在使用带有io.socket的node.js编写一个应该保存所有消息的聊天,并向他们展示两个新用户。 消息存储在对象数组中。 当我用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 });
});
});

1 个答案:

答案 0 :(得分:0)

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

(顺便说一句,我认为你的代码中没有任何内存泄漏...但是你会明白数组肯定会分配它需要的更多空间,而你所存储的对象需要更多放在一个简单的文件中,由于节点,例如索引)