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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.04.2011, 11:00   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а точно ЛЮБОЕ изменение приводит к пересозданию контейнера? даже conpoke?
вопрос отсюда Как правильно хранить статичный набор начальных данных в классах?

Цитата:
Сообщение от CDR Посмотреть сообщение
Контейнер не может содержать в себе классы, т.к. сам не является классом.
Контейнер относится к value-типам (как str, int, real), а не к reference-типам (класс, запись).
Следовательно структура контейнера создается в памяти только один раз при его инициализации. Последующие изменения содержимого контейнера реализованы, как создание нового контейнера и копирование значений из старого в новый.
Отсюда крайне не рекомендуется использовать решения вроде заполнения контейнера в цикле. Но полезно использовать, например, для передачи параметров между клиентом и сервером.
во-первых, большое спасибо за это сообщение.
во-вторых, вопрос всем: а точно ЛЮБОЕ изменение приводит к пересозданию контейнера? даже conpoke?

А как же класс KeySum, который активно раньше использовался,
и поныне используется в локализованном функционале?

как измерить в ax2009? вроде HeapChek не работает в ax2009.

см. также
контейнер: '+=' vs 'conins' небольшое исследование
SmartHeap out of Memory при работе пакетного сервера
__________________
полезное на axForum, github, vk, coub.
Старый 08.04.2011, 12:43   #3  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от CDR Посмотреть сообщение
Точно-точно.
Откуда дровишки ? Есть доступ к исходникам ядра ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 08.04.2011, 12:55   #4  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Вообще-то я тоже считаю, что пересоздается, но прямых доказательств на руках нет. Чую, как говорится, сию бесовщину, но обосновать не могу ...
Контейнер по сути есть структурированная строка (с разделителями и типизаторами хранимых элементов) - а манипуляции с изменением размера строки (что происходит при вставке, удалении и иногда при перезаписи элемента контейнера) делаются гораздо проще путем создания нового буфера памяти, копирования туда с разными манипуляциями содержимого из старого и высвобождением старого буфера памяти. .
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 08.04.2011, 13:04   #5  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Во, нашел в документации по DAX...

Цитата:
In X++, container is one of the primitive types, or value types. container is not a class. A container contains an ordered sequence of primitive values or other containers.

A container slightly resembles an array, or collections such as the List or Stack classes. However, you can never change the size or content of a container after the container is created. X++ statements that appear to modify a container are internally building a new container and copying values as necessary. Even an assignment of a container to another container variable creates a new copy of the container. All of this has performance implications.

Containers are Immutable.
Some X++ statements with containers might appear like they modify a container, but inside the system this never occurs. Instead, the data from the original container is combined with data from the command to build a new container.

You create a new container every time that you call any of the following functions:
conDel
conIns
conPoke

The following statements all create a new container:
myContainer = [1];
myContainer += [2];
myContainer4 = myContainer5;

A container is best suited for processes that do not involve excessive modification to the size or contents of the container. When a container undergoes excessive additions of data, overall system performance can be decreased by the need to repeatedly copy container data and allocate new space.
Мой вольный перевод:

Контейнер - это value-тип. Контейнер не класс! Контейнер содержит последовательность value-типов или других контейнеров.

Контейнер слегка напоминает классы List или Stack. Однако невозможно изменить размер или содержимое контейнера после его создания. Операторы X++, модифицирующие контейнер, внутри создают новый контейнер и копируют значения.

Контейнеры относятся к immutable объектам.
Каждый раз при использовании следующих функций создается новый контейнер:
conDel
conIns
conPoke
Следующие выражения также создают новый контейнер:
myContainer = [1];
myContainer += [2];
myContainer4 = myContainer5;
__________________
Dynamics AX Experience
За это сообщение автора поблагодарили: mazzy (15), Logger (3).
Старый 08.04.2011, 13:06   #6  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
вопрос отсюда Как правильно хранить статичный набор начальных данных в классах?
А как же класс KeySum, который активно раньше использовался,
и поныне используется в локализованном функционале?
А разве это не заметно на быстродействии локализованной функциональности?
__________________
Dynamics AX Experience
Старый 08.04.2011, 13:21   #7  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Кстати, по этому поводу в той же доке написано:

Цитата:
+= is Faster Than conIns
When you want to build a new container by appending new data, you can use either the += operator or the conIns function. The += operator is the faster alternative. Use the conIns function only when you want to add new data before the last index of the original data
Оператор "+=" быстрее чем функция "conIns".
Когда надо добавить данные в контейнер, можно использовать оператор += или функцию conIns. Оператор работает быстрее. ConIns следует использовать только в случае вставки данных не в конец контейнера.
__________________
Dynamics AX Experience

Последний раз редактировалось CDR; 08.04.2011 в 13:25.
Старый 08.04.2011, 13:36   #8  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5717 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение

А как же класс KeySum, который активно раньше использовался,
и поныне используется в локализованном функционале?
Замечу что он и сейчас активно используется в нелокализованном функционале. Например в классах LedgerExchAdj,LedgerCoverage, LedgerBalances*.
Во вторых - насколько я помню, классы map,set,struct и array появились только в версии 2.5 (Возможно в версии 2.1), а классы которые я перечислил, появились гораздо раньше. А не переписали их, вероятно, просто потому что никто на производительность не жаловался.Да и все равно, в 90% случаев, 90% времени исполнения в Аксапте уходит на работу с БД, а не на интерпретацию кода и работу с памятью. Эдакое правило 90:90
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Изменение размера картинки Lucky13 DAX: Программирование 15 12.03.2015 12:15
Изменение идентификаторов(id) полей Dron AKA andy DAX: База знаний и проекты 30 17.06.2009 10:11
SalesQuickQuote - разрешить изменение фильтра в форме SHiSHok DAX: Программирование 6 26.06.2007 11:23
Блокировка на изменение fialka DAX: Программирование 4 28.02.2007 11:28
Закрыть изменение кода? Nim DAX: Администрирование 11 27.12.2006 19:10
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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