AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.07.2008, 11:59   #1  
Shakr
Гость
 
n/a
Рекурсия, память
Axapta 3.0 SP4
Хотелось посмотреть, как Аксапта будет реагировать на рекурсию:
Код:
int rn(int i)
{
    int loop(int _i)
    {
        int j = _i+1;
        ;
        j = j>10?1:j;

        return j;
    }

    do
    {
        loop(i);
    }
    while (true);
    return i;
}
Аксапта начала потихонечку кушать оперативку и виртуальную память, после остановки и не думая за собой подчистить. Это нельзя вылечить? Может какие-то ухищрения с подчисткой памяти существуют?

Реальной задачи на самом-то деле - нет, но есть интерес
Старый 28.07.2008, 12:20   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
KernelRollup (или как то так) какой?
Старый 28.07.2008, 12:24   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А где, собственно, рекурсия?
Я вижу только странный бесконечный цикл
Старый 28.07.2008, 12:35   #4  
Shakr
Гость
 
n/a
Navision
с рекурсией будет ещё хуже - она у меня падает на 400-м шаге.
Последнее значение j до переполнения = 399

Ошибка времени выполнения. : Переполнение во внутреннем стеке исполнения кода.

Код:
int rn(int i)
{
    int loop(int _i)
    {
        int j = _i+1;
        ;
        j = j>600?1:j;

        print j;
        if (j<500)
            loop(j);

        return j;
    }

    do
    {
        loop(i);
    }
    while (true);
    return i;
}
по предыдущему варианту: цикл по сути дела - безобиднейший, не так ли? Ну позвал функцию из 1го оператора, ну вышел из неё- с чего бы тут памяти пропадать?
Старый 28.07.2008, 12:50   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Только что проверил на АХ 2009. С первым заданием все ОК - утечек нет.
Второе вызывает переполнение внутреннего стека. Но, рекурсия глубиной 500 - маловероятно. Даже 399 - довольно много
Старый 28.07.2008, 12:54   #6  
Shakr
Гость
 
n/a
Цитата:
Сообщение от Sada Посмотреть сообщение
KernelRollup (или как то так) какой?
cудя по инфо с этой странички:
http://forum.mazzy.ru/index.php?showtopic=881

Axapta 3.0 EE SP4 FP1 1951.4060 514-320 SP4 OP023-196

я так понимаю, что никаких 'kernel rollup' не накачено? То есть ядро не патчилось?
Старый 28.07.2008, 12:56   #7  
Shakr
Гость
 
n/a
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Только что проверил на АХ 2009. С первым заданием все ОК - утечек нет.
Второе вызывает переполнение внутреннего стека. Но, рекурсия глубиной 500 - маловероятно. Даже 399 - довольно много
Код:
int rn(int i)
{
    int loop(int _i)
    {
        int j = _i+1;
        ;
        j = j>600?1:j;

        print j;
        if (j<300)
            loop(j);

        return j;
    }

    do
    {
        loop(i);
    }
    while (true);
    return i;
}
Такой вариант у меня не вызывает переполнения, но память течёт
Старый 28.07.2008, 13:10   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
У меня и такой вариант нормально.
Скорее всего, дело действительно в необходимости накатить какие-то патчи на kernell
Старый 28.07.2008, 13:21   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Shakr Посмотреть сообщение
с рекурсией будет ещё хуже - она у меня падает на 400-м шаге.
Последнее значение j до переполнения = 399

Ошибка времени выполнения. : Переполнение во внутреннем стеке исполнения кода.
400 - это, вроде, стандартное ограничение на глубину вызовов методов и вложенных функций (прочитал в книге Еременко, Шашкова на стр.242)
Старый 28.07.2008, 13:38   #10  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
KR 2 поставить надо ИМХО. Там с утечкой памяти пофиксино чегото было.
За это сообщение автора поблагодарили:  (1).
Старый 28.07.2008, 15:28   #11  
Shakr
Гость
 
n/a
спасибо за совет. окончательно расстроился на этом...
Код:
do
{
}
while (true)
Теги
ax2009, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
А построение перекрестных ссылок опять сожрет всю память и завесит систему нафих Alex_K DAX: Администрирование 15 04.09.2009 22:00
Очистить память после разноски журнала ОС npokypatop DAX: Программирование 7 25.06.2008 17:03
Еще раз про AOS и память Oleg V.Cat DAX: Администрирование 3 15.11.2007 11:42
Ахтунг! Lookup в map жрет память... Tony Green DAX: Программирование 7 06.06.2007 12:37
Аксапта и память Swetik DAX: Функционал 9 16.04.2004 09:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:17.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.