2015-07-22 2 views
0

Для записи я использую API-интерфейс Node для многих своих программ. Во всяком случае, когда я запускаю свой код, я получаю ошибку утечки памяти, говоря, что открыто 11 эмиттеров. Если это так, как бы я запретил моей программе открывать несколько экземпляров getData? Если я не могу этого предотвратить, есть ли грубый способ удалить экземпляры, которые я не хочу испускать? Я пытаюсь запустить функцию каждые 50 мс. Вот мой код:setInterval вызывает переполнение памяти?

setInterval(getData, 100); 

function getData() { 
    "use strict"; 
    //When the serialport opens: 
    serialport.on("open", function() { 
     serialport.on("data", function(data) { 
      //Takes the current string value, turns it into an integer, then stores it in nCurrentValue 
      runData(parseInt(data.toString())); 
     }); 
    }); 
} 
getData(); 

function runData(value) { 
    "use strict"; 
    socket.emit('NewData',value); 
    console.log(value); 
} 
+5

ну, вы добавляете триггеры событий для onopen и ondata каждые 100 мс секунд, поэтому, я думаю, после в то время как он наводняет да ... – Icepickle

+0

Как было предложено @Icepickle, зачем вам нужно «setInterval»? По-видимому, это событие управляется событиями и будет вызывать метод 'runData' каждый раз, когда вы получаете данные. – DavidG

ответ

1

Вы можете сделать это путем извлечения триггеры событий за пределами вашего GetData. Насколько я понимаю nodejs, он управляется событиями, поэтому вам нужно только присоединить onopen/ondata один раз, и тогда все соединения будут называться вашими вызовами функций.

Я думаю, вам только нужно сделать следующее:

serialport.on("open", newConnection); 
serialport.on("data", newDataReceived); 

function newConnection() { 
    // do something with the connection... 
} 

function newDataReceived(data) { 
    // do something with the data received 
} 

Я предполагаю, что последовательный порт также посылает информацию, когда соединение закрывается, так что вы могли бы добавить что-то в подобных:

serialport.on("close", closeConnection); 

function closeConnection() { 
    // close the connection internally afterwards 
} 

хотя последняя часть является чисто догадка ...

в этом случае nodejs должен сгореть открытое событие, когда новое соединение выполнено, а затем, огонь еи данных когда данные получены. Если вы проверите, какую библиотеку вы используете для последовательного порта, может быть руководство по использованию библиотеки

Смежные вопросы