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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.08.2004, 06:05   #28  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Всё таки нашел тот топик и еще раз заценил тот глюк с контейнером.
Решил расследовать причины такого странного поведения контейнера и написал следующий Job:
(крайне рекомендуется запустить и насладится результатом всем, кто пользовался или собирается пользоваться ф-ей conDel)

PHP код:
static void Job5(Args _args)
{
    
int k// длина контейнера
    
int d// число элементов для удаления "за раз"
    
int is;
    
container con;
    
void checkContainer()
    {
        
con conNull();
        for ( 
1<= ki++ )
            
con += i;
        
k mod d;
        for ( 
1<= k div di++ )
            
con conDelcon1);
        if ( 
conLencon ) != )
        {
            
info"нач. длина " int2str) + "; удаляем по " int2str) + " эл. за раз в цикле " int2strk div d ) + " итераций; " +
                  
"в конце должно статься " int2str) + " эл.; реально осталось " int2strconLencon ) ) + " эл.!" );
        }
    }
    ;

    for ( 
1<= 100k++ )
    {
        for ( 
1<= kd++ )
        {
            
checkContainer();
        }
    }

Результаты ошеломляют.
Особенно рекомендую посмотреть нижнюю часть инфолога.
Причина видимо кроется в том, что контейнеры как и любая нормальная динамическая структура выделяет память под свои элементы если в нём не хватает места не по одному элементу, а порциями. Как видно в X++ начальное значение этой порции равно 50 элементов, именно с этого количества элементов в контейнере начинаются страшные глюки. Соответственно в любом контейнере хранятся два параметра - n - реальное число элементов в массиве и m - число элементов под которое выделена память. m может быть больше или равно n.
Так вот такое ощущение что conDel в каком то месте ошибочно вместо n обращается к m или наоборот!
За это сообщение автора поблагодарили: alex55 (1).
Теги
recid, баг, ошибка, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
Как сформировать RecId Arahnid DAX: Программирование 18 14.07.2008 15:02
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:38.