Текущее время: Ср, июл 30 2025, 21:40

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 16:16 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
Поклон спецам от новичка. Где бы найти инфу по сабжу? Во всех перфоманс гайдах написано - use field-symbols... Насколько это хорошо с assigning в принципе понятно, но когда происходит
assign () to <fs>
в среде из сотен переменных и таблиц, я подозреваю что это не самый оптимальный подход, особенно если это цикл импорта файла с разнородными данными...

Продолжаю дальше - в принципе вариантов кроме приемов динамического программирования в задачке пока нету. Даст ли прирост производительности подход прекомпиляции динамических процедур с последующим вызовом в цикле? Самих динамических процедур ожидается вплоть до двух десятков. Уточняющий вопрос - уместно ли вообще здесь слово "компиляция", т.к. я не знаю каким образом сохраняются и исполняются динамически сформированные проги.

И общий вопрос - хочется почитать что-либо про глубокие внутренности ABAP'а. С курсом 490 и performance examples ознакомился, но хочется более фундаментальных знаний, чем шаблонные рекомендации. Устройство строк, таблиц, runtime environment и т.д. Гугление ничего не дает.

Зачем все это новичку? 1. в программировании не первый год 2. первая же задачка - оптимизация скорости уже сделанной программы. Спасибо!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 16:50 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
golomeen, а как связаны "assign () to <fs>" и "в среде из сотен переменных и таблиц"?
Опишите вашу задачу. Не совсем понятно что вы хотите оптимизировать и какие динамические процедуры использовать.

В общем случае использование field-symbols первый и самый простой пункт в оптимизации производительности.
Динамическое программирование же к оптимизации не относится никаким боком. Это более читаемый и компактный код. Но не быстрый.

С фундаментальными знаниями не все просто. Отдельного нормального источника нет. По кускам много всего есть на help.sap.com, sdn.sap.com и в курсах.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:10 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
Описываю. Реализован динамический мэппинг входных данных из csv-подобного файла (как уже сказано, разнородного) на основании кода записи. По нему определяется, в какую таблицу все будет ложиться. Пример

tables:
ZTABLE1, ZTABLE2, ... ZTABLEN.
...
FIELD-SYMBOLS :
<myfs> type any.
DATA:
my_fs_locator type STRING.
...
ASSIGN (my_fs_locator) TO <myfs>.
....
INSERT (my_fs_locator) FROM <myfs>.

в my_fs_locator перед выполнением assign может оказаться имя любой из таблиц перечисленных в начале. таблиц 2 десятка, на каждую как минимум дополнительная внутренняя + своя WA и еще тьма других переменных как локальных, так и глобальных из разных пулов. спрашивается - сколько assign будет искать эту несчастную таблицу в этой куче.
не лучше ли склеить 'assign ', my_fs_locator, ' to <myfs>' , несколько других строк (они касаются уже полей таблиц) и выполнять это подпрограммой? впрочем в таком коде скорее всего вообще не останется assign, либо как минимум <myfs> обретет конкретный тип нужной таблицы, короче код будет составлен максимально специфично.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:15 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
golomeen написал(а):
Поклон спецам от новичка. Где бы найти инфу по сабжу? Во всех перфоманс гайдах написано - use field-symbols... Насколько это хорошо с assigning в принципе понятно, но когда происходит
assign () to <fs>
в среде из сотен переменных и таблиц, я подозреваю что это не самый оптимальный подход, особенно если это цикл импорта файла с разнородными данными...

Продолжаю дальше - в принципе вариантов кроме приемов динамического программирования в задачке пока нету. Даст ли прирост производительности подход прекомпиляции динамических процедур с последующим вызовом в цикле? Самих динамических процедур ожидается вплоть до двух десятков. Уточняющий вопрос - уместно ли вообще здесь слово "компиляция", т.к. я не знаю каким образом сохраняются и исполняются динамически сформированные проги.

И общий вопрос - хочется почитать что-либо про глубокие внутренности ABAP'а. С курсом 490 и performance examples ознакомился, но хочется более фундаментальных знаний, чем шаблонные рекомендации. Устройство строк, таблиц, runtime environment и т.д. Гугление ничего не дает.

Зачем все это новичку? 1. в программировании не первый год 2. первая же задачка - оптимизация скорости уже сделанной программы. Спасибо!

Если Вы <я не знать русский языка>, то тогда ещё раз и внимательно перечитайте курс 490 - рекомендации может и шаблонные, но при грамотном применении дают реальный эффект. А вот всякое там "устройство строк, таблиц, runtime environment и т.д." чистая теория и мало где может быть применено практически. Вот поэтому и гугление ничего не дает.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:25 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
sy-uname
не отрицаю полезности и нетленности 490 курса, но проблема этого assign съела мне весь мозг :) а в коде есть еще и тьма assign component. я слишком хорошо представляю какие тормоза это дает в классике типа C++/Delphi поэтому жду-не дождусь узнать, как избежать этого в ABAP :)
Еще один аргумент взяться именно за assign, а не прочую нетленку - кусок с assign самая базовая и повторяющаяся часть всего процесса.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
golomeen написал(а):
...жду-не дождусь узнать, как избежать этого в ABAP :)

Думаю никак, ибо это не проблема АБАП, а общее протиовречие любого программирования: Либо гибко - либо быстро!

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
разница с into есть, и в ряде случаев не в пользу assign/get reference,
но там такие микросекунды, что на фоне сопутствующих вызовов такая оптимизация погоды не сделает.

imho, лучше попытаться оптимизировать алгоритм целиком,
а если явных вариантов оптимизации нет, значит все как надо :mrgreen:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:47 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
golomeen написал(а):
sy-uname
не отрицаю полезности и нетленности 490 курса, но проблема этого assign съела мне весь мозг :) а в коде есть еще и тьма assign component. я слишком хорошо представляю какие тормоза это дает в классике типа C++/Delphi поэтому жду-не дождусь узнать, как избежать этого в ABAP :)
Еще один аргумент взяться именно за assign, а не прочую нетленку - кусок с assign самая базовая и повторяющаяся часть всего процесса.

Вы гадаете или профайлер вам показал тормоза?
Вы 100% уверены что тормоза не в базе данных? Что нет лишних селектов\инсертов? Что все циклы у Вас оптимальны и нет лишних чтений из таблиц?
Нет лишних перекладываний и пр?
И забудьте, свершенно забудьте C++/Delphi. Здесь Вам не там. Довольно разные среды.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:55 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
тогда ответьте мне на до ужаса простой вопрос
кто быстрее
assign TABLE1 to <fs>
или
assign 'TABLE1' to <fs>
или
myvar = 'TABLE1'
assign (myvar) to <fs>

начальные условия остаются - tables TABLE1 - одна из сотен разнообразных таблиц, переменных и т.д. и т.п.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
символьная сноска замедляет assign,
если укажете ее в lower-case, то станет еще медленнее

imho, через пару дней "отпустит" :mrgreen:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 17:59 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
sy-uname написал(а):
И забудьте, свершенно забудьте C++/Delphi. Здесь Вам не там. Довольно разные среды.


я прекрасно понимаю что байт код и pure x86 вещи кардинально разные. но догадываюсь, что поиск по строке в окружении и обращение по точному адресу хоть на VM хоть на настоящем CPU должно отличаться в десятки раз по скорости. Вопрос в том что я не уверен ни в "поиск по строке в окружении" ни в "обращение по точному адресу" как методах выполнения того или иного кода на ABAP VM.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 18:03 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
trop написал(а):
символьная сноска замедляет assign,
если укажете ее в lower-case, то станет еще медленнее


вот спасибо, наконец-то :)

осталось разузнать про компляцию. покамест разбор разных типов строк не захардкоден заранее, есть мысль "хардкодить" его динамически на основании данных мэппинговой таблицы. даст оно мне что-то или нет?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 18:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
imho,
оптимизация которая дает до 10-15% от общего времени выполнения является несущественной,
т.е. код может быть и не идеален, но главное что он давно работает и кем-то отлажен.
если оптимизация усложняет код, то может лучше так и не оптимизировать,
чтобы потом не страдать от внезапно напавшей икоты.
для успокоения, можете полистать исходники стандартного функционала :mrgreen:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 18:25 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
golomeen написал(а):
trop написал(а):
символьная сноска замедляет assign,
если укажете ее в lower-case, то станет еще медленнее


вот спасибо, наконец-то :)

осталось разузнать про компляцию. покамест разбор разных типов строк не захардкоден заранее, есть мысль "хардкодить" его динамически на основании данных мэппинговой таблицы. даст оно мне что-то или нет?

Это даст Большое спасибо от всех тех, кто эту "динамику" в дальнейшем будет сопровождать.
Учтите, генерация требует времени. Формирование текста на основе некоторых данных требует времени. Количество попыток генерации ограничено и не очень велико.
И ещё раз - предположу что INSERT-ы в цикле съедают больше времени, чем здержки на ASSIGN.
Кстати, Вы не думали над распараллеливанием алгоритма?

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Assign & производительность
СообщениеДобавлено: Ср, сен 09 2009, 19:05 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
мысль понятна умножать умноженное до меня лучше не буду.
инсертов уже куча локализована

в стандартном функционале только от into corresponding уже фигово :)

распараллелю обязательно когда одолею инсерты ;)

всем спасибо


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB