Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Натолкнулись на такую проблему в Cache' 5.2: Рекурсивно перебираются глобалы, при 353 выполнении метода вылетает ошибка о переполнении стека. Тестовый пример: ClassMethod testRecurse(i As %Integer = 0) As %Integer { q:i>400 i q ..testRecurse($I(i)) } Что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2008, 07:13 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Привет. Замени рекурсию циклом. =Сергей Шутов (logist) ООО Димас, Хабаровск Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2008, 08:12 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Возможно по new каждый раз переменные определяете... Хотелось бы больше информации о методе, а то тут даже увеличения i нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2008, 08:14 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Dorandr а то тут даже увеличения i нет А $I(ххх) это простите что? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2008, 08:27 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Опаньки... это ж инкремент, а мне показалось $length... Извиняйте, буквы похожи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2008, 08:44 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Ренее в МСМ "глубину" стека нужно было задавать принудительно в СИСГЕНЕ... Т.е. если тебе мало значения по умолчанию - напиши сколько тебе нужно. Правда такого количества итераций мы не делали... А как это вы "рекурсивно перебираете" и для чего? Если не секрет конечно... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2008, 08:47 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
krvsaА как это вы "рекурсивно перебираете" и для чего? Если не секрет конечно... Перебираю большое дерево в глобалах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 04:32 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
=Dimon=Перебираю большое дерево в глобалах. Как уже было сказано, стоит попробовать методы динамического программирования. С помощью $ORDER или $QUERY не пробовали реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 08:44 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Turk=Dimon=Перебираю большое дерево в глобалах. Как уже было сказано, стоит попробовать методы динамического программирования. С помощью $ORDER или $QUERY не пробовали реализовать? Именно так, и было сделано. Ключ постоянно рекурсивно перебирался. Переделали на цикл. Но ИМХО сделать заглушку на 353 рекурсивных вызова, как-то уж слишком неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 09:26 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
=Dimon=Turk=Dimon=Перебираю большое дерево в глобалах. Как уже было сказано, стоит попробовать методы динамического программирования. С помощью $ORDER или $QUERY не пробовали реализовать? Именно так, и было сделано. Ключ постоянно рекурсивно перебирался. Переделали на цикл. Но ИМХО сделать заглушку на 353 рекурсивных вызова, как-то уж слишком неправильно. В каше с максимальной глубиной рекурсии никогда не угадаешь. Расход стека зависит еще и от количества использованных new. Тут очевидно надо переделывать алгоритм. Нарветесь на ограничение не по одной причине так по другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 10:32 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
ну я В каше с максимальной глубиной рекурсии никогда не угадаешь. Расход стека зависит еще и от количества использованных new. Тут очевидно надо переделывать алгоритм. Нарветесь на ограничение не по одной причине так по другой. New не используется. Нарываться на костыли не хочется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 11:51 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Framestack size <FRAMESTACK> В версии 2008.2DS.RC Ваш пример выполнился чуть с большими значениями: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 12:07 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
=Dimon=New не используетсяЭто Вам так кажется :) Параметры, передаваемые по значению, неявно "ньючатся", т.к. для них тоже создается кадр в стеке (как и для явно "заньюченных" переменных). Кстати, вспомнился давний совет по оптимизации программ: заменять Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 13:23 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Alexey Maslov=Dimon=New не используетсяЭто Вам так кажется :) Параметры, передаваемые по значению, неявно "ньючатся", т.к. для них тоже создается кадр в стеке (как и для явно "заньюченных" переменных). Кстати, вспомнился давний совет по оптимизации программ: заменять Код: plaintext 1. Код: plaintext 1. Ничего вы не сэкономите. Компилятор все-равно разобьет вашу 'new a,b,c' на 'new a new b new c'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2008, 02:19 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Ранее утверждали что экономия есть... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2008, 08:40 |
|
||
|
Проблемы с рекурсией в Каше
|
|||
|---|---|---|---|
|
#18+
Sergei ObrastsovКомпилятор все-равно разобьет вашу 'new a,b,c' на 'new a new b new c'.Скорее наоборот: он объединит 'new a new b new c' в 'new a,b,c', но лишь при условии, что команды находятся в одной строке (по кр. мере, в версиях до 2008.1 включительно). Простой пример подтверждает это: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. = Cache for Windows (x86-32) 2008.1 (Build 401_0_6608) Thu Apr 3 2008 01:55:03 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2008, 11:59 |
|
||
|
|

start [/forum/topic.php?fid=39&gotonew=1&tid=1558693]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
138ms |
get topic data: |
10ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 455ms |

| 0 / 0 |
