Почему программа завершает выполнение?
Всем привет!
Всю голову уже себе сломал, может кто подскажет. Есть следующий код, передающий суть проблемы: var body = ""; for(var i=0; i<=5000; i++) { body += "if(str==='value" + i + "') 1==1;\n"; } body += "return str;"; var f1 = new Function("str", body); var f2 = new Function("str", body); console.log(f1('test1')); console.log(f2('test2')); // main loop for(var i=0; i<100000; i++) { f1("string"); f2("string"); console.log(i); } console.log("fin!"); Мой результат работы программы: test1 test2 1 2 3 . . ~1971 Почему цикл main loop не отрабатывает до конца и программа завершает работу (при этом никакой информации об ошибках не выводится)? Запускать в nodejs. Пожалуйста, не пишите комментарии относительно функциональности кода, проблема не в этом. Цель- выполнить в цикле две функции f1 и f2 100000 раз. У меня этот цикл прерывается на примерно 2000 итерации (плюс-минус). Почему прерывается - вот в чем вопрос первый вопрос и как этого избежать - второй. При этом интересная особенность- одна функция в цикле исполняется исправно 100000 раз. Я пробовал запускать этот код на разных машинах, результат примерно одинаковый. |
Небось, прерывается из-за перерасхода ресурсов. Мой комп от этого кода просто завис.
Цитата:
|
Цитата:
Предполагаю, что нужно как-то иначе вызывать функции, но как? Знаний не хватает, поэтому и спрашиваю. |
Приведенный код проблемы не воспроизводит что в ноде работает что в обкладчике браузера
не указана система и версия ноды |
var body = "", f1, f2; for (var i = 0; i <= 5000; i++) { body += "if(str==='value" + i + "') 1==1;\n"; } body += "return str;"; f1 = Function("str", body); f2 = Function("str", body); console.log(f1('test1')); console.log(f2('test2')); // main loop for (var i = 0; i < 100000; i++) { f1("string"); f2("string"); console.log(i); } console.log("fin!"); этот код отрабатывает, но долго 99999 fin! Process finished with exit code 0 |
Win7, памяти 4 Гб, nodejs 5.0.0
|
Цитата:
|
Цитата:
|
32 двух разрядные версии node падают т.к. скрипт использует слишком много оперативной памяти.
Не используй циклы(1000000) в которых на каждой итерации используешь блоки кода в 5000 строк по нескольку раз. Ну или делай разрывы в исполнении чтобы сборщик мусора имел шанс прибраться. |
Цитата:
|
Часовой пояс GMT +3, время: 05:57. |