У меня есть массив с именем globalArrayAllTrades
, как вы видите ниже. Мне просто нравится наводить дату в новой копии массива. Поэтому я прокручиваю, создаю новый объект и добавляю его в новый массив - просто.Копировать массив -> переполнение стека или кучи?
После этого функция делает точно так, как ожидалось. НО, если массив содержит слишком много объектов, код выходит из строя с ошибкой «FATAL ERROR: CALL_AND_RETRY_LAST» - процесс выходит из памяти ».
Мой ноутбук имеет 8 ГБ памяти ... При сбое процесса NODEJS он использует около 1,5 ГБ и используется около 70% от общего объема доступной памяти.
Я запускаю приложение NODEJS с параметром: --max_old_space_size=5000
, который обычно исправляет каждую вещь. Но не этот, и я пробовал МНОГО разных способов кодировать одну и ту же функцию - НО каждый раз - он терпит неудачу ... если исходный массив меньше.
Как исправить эту проблему?
function invertTrades(){
var original = globalArrayAllTrades.slice();
globalArrayAllTrades.length = 0;
globalListAllTrades.length = 0;
for(var i = 0; i < original.length; i++){
var objS = original[i];
var objE = original[original.length-1-i];
var objInv = new TradePoint(objS.number, objS.matchdate, objE.price, objE.size, objE.issell);
globalArrayAllTrades.push(objInv);
globalListAllTrades[objInv.matchdate] = objInv;
}
}
Это может ответить : http://stackoverflow.com/questions/7193959/memory-limit-in-node-js-and-chrome-v8 – Simon
@Simon Этот вопрос составляет 5 лет. Один из ответов говорит о том, что ограничение памяти было удалено. – Barmar
Что такое 'globalListAllTrades'? Похоже, вы используете его в качестве хранилища ключей (объекта), поэтому '.length = 0' вряд ли его пустят. – Bergi