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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.07.2012, 12:17   #1  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Ясно...

Да, жалко что нет инструмента копирования целиком табличного буфера без разделения на части или перепаковки.

UPD:
А такого инструмента наверное и не может быть. Ведь наверняка в общем случае буфер временной таблицы хранится фрагментированно совместно с другими данными в куче. И что бы передать его одним куском, этот один кусок сначала нужно собрать, на деле перепаковав табличный буфер в статическую непрерывную структуру вроде контейнера.
Тут речь идет скорее не об одном буфере, а о том чтобы все записи таблицы в контейнер запаковать и потом чохом передать. Я для этого делал два метода в global - packTable и unpackTable... Да и дело тут не в памяти, а просто в экономии RPC при передаче параметров...
За это сообщение автора поблагодарили: Logger (2).
Старый 26.07.2012, 12:31   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от fed Посмотреть сообщение
чохом передать
Это я уже понял. Просто хотел уточнить. Для того чтобы чохом передать нужно же и "чохом" хранить? Или не обязательно? Т.е. очень сомнительно, что за один "чох" можно передать, например, динамическую структуру типа Map? Мне почему-то кажется что должно выполнятся условие размещения данных в одном передаваемом куске памяти. Я ошибаюсь?
Старый 26.07.2012, 12:48   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Это я уже понял. Просто хотел уточнить. Для того чтобы чохом передать нужно же и "чохом" хранить? Или не обязательно? Т.е. очень сомнительно, что за один "чох" можно передать, например, динамическую структуру типа Map? Мне почему-то кажется что должно выполнятся условие размещения данных в одном передаваемом куске памяти. Я ошибаюсь?
Так все в кучке и хранится.
Либо в памяти (если не очень много успели записать), либо уже на диске, но все вместе

Только RPC не надо идеализировать
Большие контейнеры тоже будут передавать не целиком за раз, а разбиваться на куски. Соответственно, дополнительных вызовов будет достаточно много.
Но, в любом случае, таких обменов будет меньше, чем при условии передачи по каждой отдельной записи
__________________
Axapta v.3.0 sp5 kr2
Старый 26.07.2012, 13:32   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AndyD Посмотреть сообщение
Так все в кучке и хранится.
Либо в памяти (если не очень много успели записать), либо уже на диске, но все вместе
Т.е. вы хотите сказать, что под буфер временной таблицы сразу выделяется какой-то фиксированный максимальный размер памяти. Я считал что память под структуры таких размеров должна выделяться по мере необходимости, т.е. динамически. Возможно я немного переоцениваю объём памяти занимаемый временными таблицами.

В любом случае, если бы была реализация копировани буфера временной таблицы на уровне ядра системы, то это бы помогло бы избежать ненужных накладных расходов на переупаковку данных и в тоже время не повысила бы Chattiness
Старый 26.07.2012, 14:19   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Logger, я всё это прекрасно понимаю. Я лишь хотел убедится, что "НЕ элементарные" типы передать за один/два RPC вызова нельзя. Но после сообщения AndyD
Цитата:
Сообщение от AndyD Посмотреть сообщение
Так все в кучке и хранится.
Либо в памяти (если не очень много успели записать), либо уже на диске, но все вместе
хотелось бы убедится ещё и в том как именно хранится буфер временной таблицы в оперативной памяти. Как строка в одном месте или фрагментировано в разных связанных областях? Для общего развития так сказать. Просто когда представляешь себе как это там на самом деле всё происходит многие вещи становятся понятнее. Например почему таки нельзя просто взять и скопирования буфер временной таблицы так же как строку или контейнер?
Старый 26.07.2012, 17:23   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Почему таки нельзя просто взять и скопирования буфер временной таблицы так же как строку или контейнер?
Если говорить о передаче по сети объекта "по значению", то в любом случае будут передаваться какие-то данные, представляющие объект. Соотв., объект нужно уметь сериализовать (представить в виде потока данных - бинарных или того же XML) и десериализовать (из потока данных воссоздать представление объекта в памяти). В этом плане те же объекты-коллекции имеют готовые механизмы сериализации/десериализации - экземплярный метод pack() и статический create(), аналогично обстоит дело с классами, реализующими SysPackable. Их можно запаковать на одной стороне в контейнер, "чохом" передать его и распаковать (воссоздать) на другой стороне. Временные таблицы тут отличаются лишь тем, что у них нет собственного механизма сериализации/десериализации, поэтому приходится приделывать им костылики.
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я лишь хотел убедится, что "НЕ элементарные" типы передать за один/два RPC вызова нельзя.
При передаче объекта "по значению" все зависит от того, поместится ли его сериализованное представление в один/два RPC-пакета или нет.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача бинарных файлов с клиента на AOS и обратно corvax DAX: Программирование 9 01.04.2014 15:05
Join временной таблицы в запросе yahenz DAX: Программирование 12 24.04.2012 14:59
Display метод временной таблицы выполняется в компании DAT S.Kuskov DAX: Программирование 4 15.04.2011 20:11
Передача временной таблицы в batch DTD DAX: Программирование 10 30.04.2008 13:55
Передача временной таблицы 6apcyk DAX: Программирование 11 09.08.2006 17:32
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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