|
19.09.2008, 13:57 | #1 |
Участник
|
DAX vs 1C
Что-то пришла мне в голову мысль сравнить скорость работы Аксапты и 1С. Написал простой тест:
PHP код:
PHP код:
Конструкция for() в Аксапте увеличила время еще на 6 секунд. Таким образом локальные вычисления в DAX происходят в 4.4 раза медленнее 1C 7.7 + компонента 1С++ DAX 4.0 Какие есть мнения?
__________________
Дом поросенка должен быть крепостью. (Наф-Наф, полн. собр. соч., т.5, стр. 286) |
|
19.09.2008, 14:08 | #2 |
Участник
|
Маладец!
но обявление двух функций не эквивалентно объявлению одной функции с вложенной подфункцией. вместо n+1 можно использовать ++n для замера скорости лучше не пользоваться инфологом - это очень тяжелая структура. для замера скорости лучше пользоваться таймером. Их предлгалалось несколько вариантов. См. обсуждения на форуме. А также были обсуждения какие конструкции яызка X++ являются самыми медленными в рамках X++. И еще одно соображение. Предполагаю, что вы сейчас замерили не скорость "локальных вычислений", а скорость "сборки мусора". Скорость сборки мусора сильно зависит от используемой памяти. Т.е. для данного теста помимо скорости нужно показывать используемую клиентом память |
|
19.09.2008, 14:09 | #3 |
Участник
|
ИМХО. Ассемблер рулит. На нём наверняка будет быстрее.
|
|
19.09.2008, 14:17 | #4 |
Участник
|
|
|
19.09.2008, 16:06 | #5 |
Участник
|
Цитата:
я не просил оценить грамотность написания кода. код написан идентично для двух систем. надеюсь это ни у кого здесь не вызывает сомнений. Цитата:
вместо n+1 можно использовать ++n
Цитата:
для замера скорости лучше не пользоваться инфологом - это очень тяжелая
структура. Цитата:
для замера скорости лучше пользоваться таймером. Их предлгалалось несколько вариантов.
См. обсуждения на форуме. Цитата:
А также были обсуждения какие конструкции яызка X++ являются самыми медленными в рамках X++.
И еще одно соображение. Предполагаю, что вы сейчас замерили не скорость "локальных вычислений", а скорость "сборки мусора". Скорость сборки мусора сильно зависит от используемой памяти. Т.е. для данного теста помимо скорости нужно показывать используемую клиентом память понятно что для жизни вне лаборатории ситуация встретится навряд ли(сложно представить кусок кода длинной в пять милл. строк) разве что... да нет, навряд ли.
__________________
Дом поросенка должен быть крепостью. (Наф-Наф, полн. собр. соч., т.5, стр. 286) |
|
19.09.2008, 18:27 | #6 |
Участник
|
Цитата:
Сравнивать имеет смысл решения конкретных задач, для которых системы предназначены. А так, извините, это просто глупость. Цитата:
я не просил оценить грамотность написания кода. код написан идентично для двух систем. надеюсь это ни у кого здесь не вызывает сомнений.
Цитата:
понятно что для жизни вне лаборатории ситуация встретится навряд ли(сложно представить кусок кода длинной в пять милл. строк) разве что... да нет, навряд ли.
"Хрр!" - сказала японская пила. "Ага!" - сказали суровые сибирские мужики. |
|
19.09.2008, 18:40 | #7 |
Участник
|
ИМХО польза таки есть - данный тест показывает "размер" накладных расходов при частом вызове методов, что очень часто имеет место быть в Аксапте.
Т.е. пропагандируемые методы разбиения одного большого метода на кучку маленьких ведут к потере производительности. |
|
19.09.2008, 22:47 | #8 |
Участник
|
Цитата:
Читайте еще раз DAX vs 1C Цитата:
DAX vs 1C Без него 7 секунд. Добавил до таймера info - получил 8 секунд. Получается, что вызов инфолога добавиляет около 10-15%. Цитата:
Сообщение от mit
ну еще раз обращу внимание что задача не стояла получить супер результат на этом куске кода (для супер результата - тупо бы взяли супер компьютер ). задача была сравнить две системы. причем на довольно узком участке - а именно - локальные вычисления. я подозреваю что тут все упрется даже не в вычисления, а в скорости перехода интерпретатора по коду со строки на строку.
Цитата:
создаете пять-десять новых номенклатур. настраиваете их примерно одинаково. методика списания себестоимости ФИФО или средняя или другая на выбор. создаете сотню приходов для каждой номенклатуры в обоих системах (замеряете время, используемую память) создаете сотню расходов для каждой номенклатуры в обоих системах (замеряете время, используемую память) после этого задним числом добавляете накладные расходы в обоих системах. после этого рассчитываете себестоимость для новых номенклатур на одном компе или распраллеливаете алгоритм расчета на пару-тройку компьютеров (замеряете время, используемую память) получаете очень хороший синтетический тест. для полной картины надо бы добавить фоновые процессы разноски/проведения приходов/расходов других номенклатур для всех замеряемых этапов. Но ведь тут выяснится, что накладной расход в 7ке на уже существующие приходы не начисляется, нужно перепроводить. Тут выяснится, что в 7ке нужно перепроводить все документы и прочая отсутствующая фигня типа невозможности распарралелить расчет себестоимости... К тому же неожиданно всплывет ваш упомянутый 1С++ и выяснится, что у вас полностью переписанная конфигурация, с которой надо разбираться и разбираться. Вот и остается замерять скорость прогона пустых циклов Цитата:
Согласен, что много мелких - плохо. Слишком большие методы тоже плохо. |
|
22.09.2008, 13:47 | #9 |
Участник
|
тыгыгдын тыгыгдын тыгыгдын (поскакал конь тыгыгдынский).
в общем то не пытался чернить аксапту, или выгораживать 1с. хотел просто поделиться с общественностью наблюдением. думаю что это сравнение не даёт плюсов 1с, так как указанные операции в природе редко встречаются, а задачи быстродействием будут упираться совсем в другие вещи (напрмер в скорость выборки из БД), по сему общее быстродействие у ах будет думаю выше. так же нужно иметь ввиду историю. win95 тоже было нечто новым, но достаточно тормозным. так происходит всегда при переходе к новым технологиям, координально меняющим привычный уклад. в четверке было переписано очень очень многое, причем интерфейс старались оставить прежним. судя по переносу сроков все шло очень не гладко. надеюсь что следующие версии будут более производительными. Цитата:
Цитата:
Сравнивать имеет смысл решения конкретных задач, для которых системы предназначены. А так, извините, это просто глупость.
Цитата:
У меня вызывает. Компиляторы, штука сложная. Порой, для ускорения одних задач приходится жертвовать производительностью других. И что там сделали авторы обоих компиляторов, совершенно неважно. Важно, насколько они справляются с теми задачами, для которых они предназначены.Вспомнилось. На одном внедрении была задача оптимизации. После упрощения (точнее, дискретизации) её можно было привести к стандартной задаче, реализуемой обычными пакетами типа матлаб и т.п. Ан нет, решили в Аксапте. Потом месяц оптимизировали, так как суток для расчёта не хватало...
"Хрр!" - сказала японская пила. "Ага!" - сказали суровые сибирские мужики. 2All не принимайте близко результаты. повторюсь это не показатель работы систем, это лишь наблюдение. думаю что при написании кода его можно учесть и тем самым избежать излишних накладных расходов. в любом случае, если это поможет хоть кому нибудь то это уже хорошо.
__________________
Дом поросенка должен быть крепостью. (Наф-Наф, полн. собр. соч., т.5, стр. 286) |
|
23.09.2008, 11:07 | #10 |
Участник
|
Цитата:
Цитата:
Цитата:
контейнер: '+=' vs 'conins' небольшое исследование Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Элементы функционального программирования в Axapta Свой progressBar |
|
19.09.2008, 14:11 | #11 |
Ищущий знания...
|
AX 3.0
X++: static void AEliz_test(Args _args) { int i = 5000000; int i1; int stratTime, endTime, runTime; ; stratTime = timeNow(); for(i1=1;i1<i;i1++) { } endTime = timeNow(); runTime = endTime - stratTime; info(time2str(runTime, 1,1)); } выполнялось на клиенте.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
19.09.2008, 14:19 | #12 |
Участник
|
Цитата:
Сообщение от lev
AX 3.0
X++: static void AEliz_test(Args _args) { int i = 5000000; int i1; int stratTime, endTime, runTime; ; stratTime = timeNow(); for(i1=1;i1<i;i1++) { } endTime = timeNow(); runTime = endTime - stratTime; info(time2str(runTime, 1,1)); } выполнялось на клиенте. |
|
19.09.2008, 14:21 | #13 |
Участник
|
Началось...
Но этот код более правильный с методической точки зрения. |
|
19.09.2008, 14:16 | #14 |
Участник
|
Цитата:
сравнивать надо на задачах, для которых эти системы предназначены. Я правильно понимаю, что вы считаете, что Аксапта с 1Сом предназначены для целочисленных вычислений? |
|
19.09.2008, 14:39 | #15 |
очами вижу
|
Цитата:
По поводу методически более правильного решения. PHP код:
PHP код:
Не знаю, что в понимании MS называется компиляцией, но даже транслятор выполняется быстрее. |
|
19.09.2008, 14:59 | #16 |
Участник
|
Цитата:
Цитата:
В расчете стоимости время на огранизацию цикла - наверняка самая существенная часть. Именно поэтому вы начали с циклов |
|
19.09.2008, 15:11 | #17 |
очами вижу
|
|
|
19.09.2008, 22:54 | #18 |
Участник
|
Цитата:
Получил 4.681 |
|
19.09.2008, 14:30 | #19 |
Модератор
|
хм....
X++: static void AEliz_test(Args _args) { int i = 5000000; int i1; int stratTime, endTime, runTime; ; stratTime = timeNow(); for(i1=1;i1<i;i1++) { } endTime = timeNow(); runTime = endTime - stratTime; info(time2str(runTime, 1,1)); } на DAX 4.0 SP2 = 17 сек |
|
19.09.2008, 14:51 | #20 |
Ищущий знания...
|
с while выполнилось быстрее на одну секунду, т.е. выполнение заняло 8 секунд.
X++: static void AEliz_test(Args _args) { int i = 5000000; int i1; int stratTime, endTime, runTime; ; stratTime = timeNow(); while(i1<i) { i1++; } endTime = timeNow(); runTime = endTime - stratTime; info(time2str(runTime, 1,1)); }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
Теги |
1c, производительность, сравнение систем, ax3.0, ax4.0 |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|