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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.06.2011, 22:07   #1  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Мы в итоге (спасибо wolfstein) пошли по еще более простому пути - заменили вызов mappingExists_RU на сравнение tableid с перечнем конкретных таблиц. Утечка памяти ликвидирована полностью, скорость разноски тоже немного увеличилась (хотя и не так сильно, как я ожидал).
За это сообщение автора поблагодарили: someOne (3).
Старый 09.06.2011, 23:17   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Мы сделали так. Скорость разноски увеличилась на порядок.

1. Обявляем в классе \Classes\Application.classDeclaration переменную
X++:
Map                     mappingsInfo_RU; // Оптимизация разноски накладной, EVO 26.04.2011
2. Добавляем новый метод \Classes\Application\mappingsInfo_RU
X++:
// Оптимизация разноски накладной, EVO 26.04.2011
Map mappingsInfo_RU()
{
    ;
    if (!mappingsInfo_RU)
    {
        mappingsInfo_RU = new Map(Types::Container, Types::Class); // [TableId, MapId], MappingsInfo_RU object
    }

    return mappingsInfo_RU;
}
3. Модификацируем метод \Classes\MappingsInfo_RU\createMapWithFieldId
X++:
static public Map createMapWithFieldId(tableId _tableId, tableId _mapID)
{
    MappingsInfo_RU    mappingsInfo;
    ;

    // Оптимизация разноски накладной, EVO 26.04.2011 -->
    //orig mappingsInfo = new MappingsInfo_RU(_tableId, _mapID);
    //orig return mappingsInfo.find();
    if (!appl.mappingsInfo_RU().exists([_tableId, _mapID]))
    {
        mappingsInfo = new MappingsInfo_RU(_tableId, _mapID);
        appl.mappingsInfo_RU().insert([_tableId, _mapID], mappingsInfo.find());
    }
    return appl.mappingsInfo_RU().lookup([_tableId, _mapID]);
    // Оптимизация разноски накладной, EVO 26.04.2011 <--
}

Последний раз редактировалось DSPIC; 09.06.2011 в 23:23.
За это сообщение автора поблагодарили: UNRW (1), wolfstein (1).
Старый 09.06.2011, 23:25   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Мы сделали так. Скорость разноски увеличилась на порядок.
Идиотский вопрос: А зачем новый метод в классе Application? Почему не использовать appl.globalcache() ? Там такой же Map.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: DSPIC (5).
Старый 10.06.2011, 10:08   #4  
wolfstein is offline
wolfstein
Axapta Retail User
Axapta Retail User
 
51 / 91 (4) ++++
Регистрация: 05.07.2006
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Почему не использовать appl.globalcache() ?
С использованием appl.globalcache() - модифицируем метод \Classes\MappingsInfo_RU\createMapWithFieldId следующим образом:
X++:
static public Map createMapWithFieldId(tableId _tableId, tableId _mapID)
{
    MappingsInfo_RU    mappingsInfo;
    ;

    //mappingsInfo = new MappingsInfo_RU(_tableId, _mapID);
    //return mappingsInfo.find();

    if (!appl.globalCache().isSet(classstr(MappingsInfo_RU), [_tableId, _mapID]))
    {
        mappingsInfo = new MappingsInfo_RU(_tableId, _mapID);
        appl.globalCache().set(classstr(MappingsInfo_RU), [_tableId, _mapID], mappingsInfo.find());
    }
    return appl.globalCache().get(classstr(MappingsInfo_RU), [_tableId, _mapID]);

}
За это сообщение автора поблагодарили: DSPIC (5).
Старый 21.12.2011, 13:48   #5  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Мы в итоге (спасибо wolfstein) пошли по еще более простому пути - заменили вызов mappingExists_RU на сравнение tableid с перечнем конкретных таблиц. Утечка памяти ликвидирована полностью, скорость разноски тоже немного увеличилась (хотя и не так сильно, как я ожидал).
Хотел сделать нечто подобное. Но вначале решил исследовать поведение функции mappingExists_RU.

Собрал статистику вариантов входных параметров, которые передаются ей на вход.
Для нашего приложения (Ax2009 RU6) их оказалось всего лишь 13 комбинаций. Но самое интересное в том что из всех этих вариантов она никогда не возвращает "false". Результат всегда один и тот же: "true" !

Возникает вопрос - зачем эта функция вообще нужна ?

к примеру в методе класса SalesPurchReport_Invoice4Paym_RU она используется так

X++:
  if (mappingExists_RU(tablenum(CustVendInvoiceJour),
                         invoiceJour.TableId,
                         fieldnum(CustVendInvoiceJour, rContractCode)))
Как я понял, "false" она не может вернуть ни при каких вариантах.
так как invoiceJour в этом методе всегда VALUE: map = CustInvoice4PaymJour_RU и никак иначе.
Или я не прав ?

Короче, заменил эту функцию на
X++:
return true;
Вот и вся оптимизация...
Теги
bug, map, treenode, баг, локализация, накладная, налоги, ошибка, счет-фактура

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как автоматически отключать связи в файле Excel при пакетной обработке? decoder DAX: Программирование 7 03.06.2009 19:19
Исправление накладных и счетов-фактур Constantine DAX: Функционал 89 26.02.2006 13:13
При обработке накладной пропадают налоги Filip DAX: Функционал 21 21.03.2005 11:19
Еще 1 простой вопрос по пакетной обработке Smith DAX: Функционал 1 26.10.2004 17:55
Распределение накладных расходов при отрицательных строках закупки wb DAX: Программирование 1 30.06.2004 13:03
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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