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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.09.2018, 11:18   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Я хотел было побрюзжать, что стандартный метод всегда создает экземпляр DictTable, но вспомнил тут одну особенность ядра: я некогда его ковырял (интересно же) и обнаружил, что экземпляры Dict-классов не каждый раз создаются и удаляются по мере работы кода X++, а создаются один раз при загрузке, затем ссылки на их эксземпляры сохраняются в массиве указателей, где индексом является идентификатор соотв. объекта. Возможно, для объектов приложения используется ленивая инициализация Dict-классов, но для объектов ядра (классов и таблиц) инициализация массива указателей происходит при загрузке ядра.
Таким образом, new DictTable() или new DictClass() транслируется ядром в обращение к массиву указателей и в общем случае отрабатывает очень быстро, без выделения памяти и последующей работы сборщика мусора. Поэтому Dict-классы - это очень быстрый API отражения, в отличие, скажем, от TreeNode. Что примечательно, SysDict-классы такой особенностью, насколько я знаю, не обладают и создаются, как любые другие объекты Х++, так что с точки зрения производительности с SysDict-классами стоит быть осторожнее.
За это сообщение автора поблагодарили: sukhanchik (4), pedrozzz (3), skuull (2).
Старый 28.09.2018, 12:39   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Что примечательно, SysDict-классы такой особенностью, насколько я знаю, не обладают и создаются, как любые другие объекты Х++, так что с точки зрения производительности с SysDict-классами стоит быть осторожнее.
То есть, если правильно понимаю, лучше не создавать SysDict*, а Dict* и потом приводить к SysDict*, если нужны методы именно Sys?
За это сообщение автора поблагодарили: Logger (1).
Теги
inheritance, table inheritance, type cast

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
[AX2012] Наследование таблиц. iCloud DAX: Программирование 4 26.03.2014 15:28
AX2012 - изменение связи таблиц на форме DTD DAX: Программирование 4 10.12.2013 16:30
Как сравнить financials dimensions у двух таблиц (AX2012) ? DTD DAX: Программирование 0 17.07.2013 15:16
AX2012: drag'n'drop и поля таблиц wojzeh DAX: Программирование 2 18.01.2012 22:07
приведение типов в select simply2double DAX: Программирование 3 30.09.2004 11:24

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

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

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