![]() |
#1 |
Участник
|
Оптимизация
Навеяно последними разработками:
adkotov: Axapta Editor - Suggestions, Autotext, Hotkeys Итак. Возможно ли ускорить данную операцию (аналогично для таблиц, енум, и ЕДТ): X++: static void Job1(Args _args) { DictClass dictClass; Dictionary dict = new Dictionary(); int i = 0, j = 0; int counter; int begin; ; begin = WinApi::getTickCount(); counter = dict.classCnt(); for( i=1; i<=counter; i++) { dictClass = dict.classObject(dict.classCnt2Id(i)); if(dictClass) { dictClass.name(); //do something } } info(strfmt("Time = %1", WinApi::getTickCount() - begin)); } Пока вижу только 1 вариант - скидывать на диск список названий в какой нибуть файл (или БД) и использовать его. Еще есть варианты?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
![]() |
#2 |
Участник
|
На самом деле, зависит от
X++: //do something |
|
![]() |
#3 |
Участник
|
Цитата:
В самом деле "//do something" - добавление элемента в массив (оч. быстро) + сортировка (средне).
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
![]() |
#4 |
Участник
|
Кстати в UtilElements системные типы не попадают.
Например, класс MapEnumerator - нету там такого. PS Время немного меньше. До 140-150 мс далеко...
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 Последний раз редактировалось Alex_KD; 20.11.2007 в 17:28. |
|
![]() |
#5 |
Участник
|
Цитата:
Разве что таким способом http://axapta.mazzy.ru/lib/aoscash/ но кто-то должен будет следить за кэшем Цитата:
Во-первых, стандартный кэш объектов Аксапты устроен так, что на клиента по сети передаются не все объекты, а только те, что используются. В результате снижается трафик и уменьшается время "холодной" загрузки. Но обсуждаемая приблуда напрочь сразу перебирает все объекты, при этом загружая их на клиента (и увеличивая трафик - там ведь около полугигабайта тянется). Может стоит подгружать по мере необходимости, а не делать свой кэш? При этом не придется решать проблемы синхронизации и конфликтов кэша, бороться с багами одновременной работы нескольких программистов в одной базе, делать периодическое обновление своего кэша и прочие программистские дела. ![]() Alex_KD, может быть стоит таки использовать стандартный кэш ядра? А уменьшить время первоначальной загрузки сократив количество обращений к объектам? Вариант 1: читать только включенные конфигурационными ключами объекты. Вариант 2: читать только перечисленные в настройках приблуды объекты. Вариант 3: работать по перекрестным ссылкам (но проблема одновременной работы нескольких программистов в этом варианте останется) Вариант 4: разобраться как ядро работает с мастер-кэшем в разных сервис-паках и заставлять администраторов периодически обновлять его на программистских компьютерах. Лично мне больше всего нравится четвертый вариант, так как он уменьшит количество кода в вашей доработке, а следовательно уменьшит и время "холодной" загрузки. |
|
![]() |
#6 |
Участник
|
Цитата:
Другие способы работы с АОТ - это всего лишь другие представления этой таблицы, другие способы работы с этой таблицей. |
|
![]() |
#7 |
Участник
|
Цитата:
X++: select utilElements group by name where utilElements.recordType == UtilElementType::Class
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от mazzy
![]() Нет.
Разве что таким способом http://axapta.mazzy.ru/lib/aoscash/ но кто-то должен будет следить за кэшем Цитата:
Но обсуждаемая приблуда напрочь сразу перебирает все объекты, при этом загружая их на клиента (и увеличивая трафик - там ведь около полугигабайта тянется).
Проверю. Цитата:
Может стоит подгружать по мере необходимости, а не делать свой кэш?
Цитата:
Вариант 1: читать только включенные конфигурационными ключами объекты.
Вариант 2: читать только перечисленные в настройках приблуды объекты. Вариант 3: работать по перекрестным ссылкам (но проблема одновременной работы нескольких программистов в этом варианте останется) Вариант 4: разобраться как ядро работает с мастер-кэшем в разных сервис-паках и заставлять администраторов периодически обновлять его на программистских компьютерах. В варианте 4 мне не нравится "Заставлять администраторов". Если выбирать между "заставлять" и временем загрузки 1-2 мин, второе предпочтительнее. Если мыслить глобальнее - синхронизация все равно какая-то будет. Я не умею програмно отслеживать действия по добавлению нового типа/обьекта/таблицы и тп. Так же не умею отслеживать изменение существующего названия. Теоритически это реально отследить, но доработка будет трудоемка. И всетаки чем не нравится свой кэш? 1. Это файл размером ~200-300Кб. (надо ведь только названия). 2. Это ускорит загрузку - в своем "кэше" можно хранить данные в уже готовом виде (мне надо сортировать элементы). 3. Оставить синхронизацию в виде доп. кнопки, а не делать ее перед запуском. Синхронизацию все равно надо - новые элементы не попадают. 4. Возможность усовершенствования Акронимов - была идея хранить историю использования и сортировать в списке подсказок опираясь на историю. Т.е. если часто используется тип InventTable - предлагать его первым по акрониму IT (актуально когда по акрониму предлагает кучу мусора, а то что реально используется где-то там в конце списка). Минусы. Если возможно сделать синхронизацию за 5-20 сек., то лучше делать это принудительно перед запуском утилиты AxAssist.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
|
![]() |
||||
Тема | Ответов | |||
Оптимизация класса Tax | 43 | |||
Список измененных (новых) объектов. Оптимизация. | 2 | |||
Оптимизация отчета Главная книга | 2 | |||
Оптимизация производственного планирования | 19 | |||
Оптимизация запросов | 3 |
|