11.01.2007, 13:42 | #1 |
Участник
|
Переполнение исполнения кода
Всем привет,
При выполнении джоба возникает ошибка времени выполнения "Переполнение во внутреннем стеке исполнения кода" если NestingLevel больше 400. Код: static void JobNestingLevel(Args _args) { ClassA a, b; int i; #define.NestingLevel(401) ; i = 0; a = new ClassA(); while (i < #NestingLevel) { b = new ClassA(); a.addChild(b); i = i + 1; } } //Такой вот ClassA: class ClassA { ClassA child; void addChild(ClassA _node) { ; if (child) { child.addChild(_node); } else { child = _node; } } } используются методы подобные addChild и возникают некоторые траблы, у кого-нибудь повторяется? |
|
11.01.2007, 13:47 | #2 |
NavAx
|
Да, есть ограничение на количество вложенных вызовов. Рекурсию лучше не использовать, т.к. приводит к трудновоспроизводимым багам
__________________
Isn't it nice when things just work? |
|
11.01.2007, 14:51 | #3 |
Участник
|
Установка самого последней версии MDAC (Microsoft Data Access Components) расширяет этот предел, насколько мне известно. (если база MS SQL)
Это не решение, но может удовлетворить вашу конкретную задачу. |
|
11.01.2007, 14:54 | #4 |
Участник
|
Думаю что MDAC может повлиять только на вложенность рекурсий на скуле и врядли на вложенность рекурсий в Аксапте.. Вообще для аксапты этот предел достаточно большой - какая у вас вложенность структуры интересно??
|
|
11.01.2007, 16:58 | #5 |
Участник
|
Цитата:
Сообщение от MironovI
Вообще для аксапты этот предел достаточно большой
Цитата:
Сообщение от MironovI
какая у вас вложенность структуры интересно??
вроде как стандартный, класс RAssetFamilyTreeNode строит структуру рекурсией, достигает количества рекурсивного вызова 400 и не зависая и не ругаясь ошибкой просто прекращает выполнять код, аксапта 3.00 сп4. |
|
11.01.2007, 17:52 | #6 |
Moderator
|
Что-то похожее было при работе со спецификациями, но там предел наступал гораздо раньше.
|
|