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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.09.2007, 07:39   #1  
rusalaudinov is offline
rusalaudinov
Участник
 
91 / 36 (2) +++
Регистрация: 24.05.2007
Задача оптимизации
Я в работе с внутренним проектом столкнулся с проблемой отображения элементов АОТа в FormTreeControl’е Аксапты. Суть в следующем: есть форма SysAOTBrowser. Это лукап форма для выбора элемента АОТа. Все в ней ничего кроме скорости первого раскрытия узлов дерева. К примеру если первый раз раскрыть ветку \Classes то проходит порядка 5 секунд прежде чем все классы отобразятся в дереве. Это очень долго и нужно сделать это время как можно меньше. То есть суть задачи - сделать как можно меньше время тупого ожидания пользователя пока система «продумается».

Последний раз редактировалось rusalaudinov; 04.09.2007 в 07:43.
Старый 04.09.2007, 09:10   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от rusalaudinov Посмотреть сообщение
К примеру если первый раз раскрыть ветку \Classes то проходит порядка 5 секунд прежде чем все классы отобразятся в дереве.
Правильно заданный вопрос - половина ответа.
5 секунд проходит не просто так.

В этот момент Аксапта подгружает элементы на клиента.
Впоследствии берет из кэша.

Вы можете попробовать поиграться с кэшем
http://axapta.mazzy.ru/lib/aoscash/
Но если ведется большая разработка, то этот способ не очень поможет
__________________
полезное на axForum, github, vk, coub.
Старый 04.09.2007, 10:05   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Не пробовал.
Может сделать что-то типа
X++:
    dict = new Dictionary();

    for(i = 1; i < dict.classCnt(); i++)
    {
        dictClass = new dictClass(dict.classCnt2Id(i));
    }
при загрузке системы.

Чтобы сразу структура АОТ подтянулась в кэш..

P.S. Проверил. Не помогает

Последний раз редактировалось kashperuk; 04.09.2007 в 10:11.
Старый 04.09.2007, 11:50   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Кстати, если посмотреть форму SysAOT, видим намного более высокую производительность.
Старый 05.09.2007, 06:40   #5  
rusalaudinov is offline
rusalaudinov
Участник
 
91 / 36 (2) +++
Регистрация: 24.05.2007
MAzzy, игру с кешем не осилил. вообще не нашел у себя на компьютере файлы *.aoc.
kashperuk, сделал как в форме SYSAOT, стало работать быстрее. КРУТО.
Старый 06.09.2007, 10:59   #6  
rusalaudinov is offline
rusalaudinov
Участник
 
91 / 36 (2) +++
Регистрация: 24.05.2007
короче всё-равно недостаточно быстро. возникла такая идея. короче чтоб при разворачивании классов система загружала и отображала только ту часть, которая видима в окне. при прокручивании скроллингом подгружалась маленько вновь. такое реально реализовать? как поступить?
Старый 06.09.2007, 11:05   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от rusalaudinov Посмотреть сообщение
короче...
Ну... Если вы считаете, что это "короче", то "легко".
Берете и программируете.
Для начала определите высоту окна и количество строк, которое в нем помещается.
Потом перехватываете события прокрутки (не забудьте о клавиатуре, мыши и о колесике)
Потом делаете хитрую (smart - интеллектуальную) загрузку, которая помнит что загружено, а что не загружено.
А потом осталось обеспечить, чтобы ваш многокилометровый код работал быстрее, чем работает ядро

В общем, "легко".
Несомненно это будет "короче", ведь разбираться с кэшем, находить какие-то мутные aoc-файлы - это так "длинно".
__________________
полезное на axForum, github, vk, coub.
Старый 06.09.2007, 11:06   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, в принципе можно что-то подобное сделать.
Упростив немного

1. Подгружаем максимум 30 узлов за раз. (первый раз тоже)
2. Появляются кнопочки далее и до конца (для примера смотри кнопки в SQL Server при выборке).
3. Для этого всего нужно итератор постоянно в памяти хранить. Не знаю, как это скажется.
4. Кнопочки вверх не нужны. Тут уже будет скроллинг работать. Тормозов при этом не будет, так как эта часть дерева уже построилась
Старый 06.09.2007, 11:17   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Еще можно кешировать состав узлов АОТа самостоятельно в файле или табличке.
Старый 06.09.2007, 11:19   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
...или табличке.
Например, ...та-да!!!... в стандартной UtilElements!

Но что я говорю! Ведь эта табличка кэшируется в каком-то мутном aoc-файле, который сложно найти.
Несомненно нужно создавать собственную табличку и создавать собственный алгоритм кэширования.
__________________
полезное на axForum, github, vk, coub.
Старый 06.09.2007, 11:36   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Например, ...та-да!!!... в стандартной UtilElements!
Есть ли у тебя код, который работает также быстро, как и нажатие на + в Classes?

Мне кажется, что есть некая магия в AOTе. Например, нажатие на F12 в редакторе как правило, неприемлемо тормозит, а F2 при прогретом кеше выводит список мнгновенно...
Старый 06.09.2007, 11:39   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Мне кажется, что есть некая магия в AOTе.
А еще первый раз очень долго создает новый программисткий проект
__________________
полезное на axForum, github, vk, coub.
Старый 06.09.2007, 12:08   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
А еще первый раз очень долго создает новый программисткий проект
...из меню. Если нажать Ctrl+N - то быстро
За это сообщение автора поблагодарили: mazzy (5).
Старый 07.09.2007, 12:26   #14  
rusalaudinov is offline
rusalaudinov
Участник
 
91 / 36 (2) +++
Регистрация: 24.05.2007
mazzy, че ты взъелся то. я не говорил что файлы мутные и не говрил короче в том смысле, в котором ты его интерпретировал.
Собственно говоря размышления привели к тому, что загружать 30 узлов и жать кнопочку снова это не дело. На работе мне подсказали что нужно обратить свой взор на работу с потоками. типа создать отделый поток в котором будет происходить загрузка данных, но который не будет мешать работе основного приложения....короче не знаю насколько понятно я объяснил. лично я никогда дел с потоками не имел и не представляю как оно работает. никто не скажет где можно посмотреть матчасть по этому вопросу, чтобы понять как оно работает и собственно откуда че берется.
Старый 07.09.2007, 12:38   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
в 3.0 потоки не рекомендуется использовать, зотя я знаю людей, у которых они пашут

База знаний ERP : Axapta / нить
Старый 07.09.2007, 12:47   #16  
rusalaudinov is offline
rusalaudinov
Участник
 
91 / 36 (2) +++
Регистрация: 24.05.2007
у меня 4.0
Старый 07.09.2007, 21:12   #17  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
rusalaudinov, посмотрите функциональность Data Crawler. Там используются threads, насколько я понимаю. В 3.0 тоже.

belugin, а можно для общего развития? Есть более конкретная информация про проблемы со threads в 3.0?
__________________
С уважением,
glibs®
Старый 10.09.2007, 12:56   #18  
rusalaudinov is offline
rusalaudinov
Участник
 
91 / 36 (2) +++
Регистрация: 24.05.2007
вот смотрите. допустим у меня есть класс в котором создан новый поток. допустим есть никак не связанная с ним форма. могу ли я запустить на выполнение метод этой формы в созданном в классепотоке? или есть другой(более простой и удобный) способ запустить метод в отдельном потоке?
Старый 10.09.2007, 13:22   #19  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
rusalaudinov, посмотрите функциональность Data Crawler. Я не уверен, но мне кажется, что вы спрашиваете про что-то подобное.

Там есть форма, которая позволяет запустить на АОСе функциональность индексирования таблиц (в 3.0 для поиска на портале, в 4.0 — для глобального поиска в GUI). При этом клиент продолжает работать, вы можете делать в нем что угодно (см. класс SysDataSearchDaemon). Есть возможность остановить фоновую задачу на АОСе (похоже, через таблицу идет коммуникация).

В 3.0 в двухзвенке это не работало (запускалось на клиенте, не в отдельном потоке). Работает только в тонком (трехзвенном) клиенте. Это на всякий случай.
__________________
С уважением,
glibs®
Старый 10.09.2007, 13:29   #20  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
glibs, я пытался давно работать в двухзвенке - ничего не получилось - остальное собрано с аксфорума

rusalaudinov, можно еще использовать таймер (см форму поиска по АОТу, База знаний ERP : Axapta / Таймер Без Формы )
Теги
aoc, aot, как правильно, кэширование, тормоза

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задача: запретить удалять строки разнесённых журналов. jeky DAX: Программирование 12 28.01.2009 22:22
Тормоза после оптимизации базы Alenka DAX: Администрирование 5 11.04.2008 19:37
Казалось бы, простая задача... konfet DAX: Программирование 5 05.04.2007 16:58
Задача оптимизации загрузки производственых мощностей SevA DAX: Программирование 23 01.11.2004 18:12
Дополнительные модули для задач оптимизации. NJD DAX: Прочие вопросы 1 26.10.2003 19:45

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

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

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