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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.02.2017, 17:46   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,985 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Интересно, кто-то замерял производительность старых и новых методов?
Как раз искал ответ на этот вопрос.
Провел замеры сам.

Во вложении джобики, которыми замерял, примерно такого вида
X++:
static void testPackSpeed_02(Args _args)
{
    int64   tickFrom;
    int64   tickTo;
    int     i;
    // int     iMax = 10000;
    int     iMax = 20000;
    SalesTable  salesTable;
    container   con;
    ;
    select salesTable order by RecId;
    //tickFrom = WinAPI::getTickCount64();
    tickFrom = WinAPI::getTickCount();
    for (i = 1; i <= iMax; i++)
    {
        con = salesTable.buf2con(false); // дефолтное поведение в 2012-й
    }
    tickTo = WinAPI::getTickCount();
    info(strFmt("Способ упаковки salesTable.buf2con(false) время %1 млсек для %2 вызовов. На один вызов %3 млсек",
        tickTo - tickFrom,
        iMax,
        strLRTrim(num2str((tickTo - tickFrom)/iMax, 16, 6, 2, 0))
        ));

}
Что меряли
Сравнивали скорость упаковки такими способами
con = salesTable.buf2con(false);
con = salesTable.buf2con(true);
con = [salesTable];
Global::buf2ConOLD2009(salesTable)

и распаковки такими способами
salesTable.con2buf(con)
Global::con2Buf(con, salesTable);
salesTable = Global::con2Buf(con);
salesTable = conPeek(con, 1);
[salesTable] = con;
Global::con2BufOLD2009(con, salesTable);

где
Global::buf2ConOLD2009
Global::con2BufOLD2009

это методы
Global::buf2Con
Global::con2Buf
взятые из 2009-й
код методов такой:
X++:
static container buf2ConOLD2009(Common common)
{
    container c         = [common.TableId];
    DictTable dictTable = new DictTable(common.TableId);
    fieldId   fieldId   = dictTable.fieldNext(0);
    DictField dictField;
    ;

    while (fieldId)
    {
        dictField = new DictField(common.TableId,fieldId);

        if(dictField.baseType() == Types::Container)
            c += [common.(fieldId)];
        else
            c += common.(fieldId);

        fieldId = dictTable.fieldNext(fieldId);
    }

    return c;
}
X++:
static void con2BufOLD2009(container c,
                    Common    common)
{
    fieldId   fieldId;
    int       i;
    DictTable dictTable;

    if (common.TableId == conpeek(c,1))
    {
        dictTable = new DictTable(common.TableId);
        fieldId = dictTable.fieldNext(0);
        i = 2;
        while (fieldId)
        {
            //common.(fieldId) = conpeek(c,i);
            common.(fieldId)[1] = conpeek(c,i); // array fix
            i++;
            fieldId = dictTable.fieldNext(fieldId);

        }
    }
}
Вложения
Тип файла: zip SharedProject_TestPackBuffer_2017_02_16_17_56_DEV.zip (2.0 Кб, 104 просмотров)

Последний раз редактировалось Logger; 16.02.2017 в 17:57.
Теги
ax2012, buf2con, con2buf, container, контейнер, производительность

 


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

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

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