|
22.08.2011, 14:09 | #1 |
Участник
|
.NET CLR vs X++
Привет всем.
Интересно, кто-нить пробовал замерять насколько быстрее исполняется clr код по сравнению с X++ Вопрос возник по прочтении этого блога : daxmusings: X++ in the .NET CLR : Life in the Fast Lane |
|
22.08.2011, 16:50 | #2 |
Участник
|
какой код?
логичнее было бы замерить разноску заказа в ax2009 и ax2012 наверняка в маркетинговых материалах на партнерсорсе есть какая-то инфа об ускорении этого или подобного процесса |
|
23.08.2011, 11:49 | #3 |
Участник
|
Цитата:
X++: PurchTable::initFromVendTableIL
__________________
The 50-50-90 rule: Any time you have a 50-50 chance of getting something right, there’s a 90% probability you’ll get it wrong. |
|
23.08.2011, 12:11 | #4 |
Участник
|
А возможно заставить 2012-ю делать разноску заказа не используя IL ?
Это было бы самым объективным сравнением. Хотя наверно скорость несильно бы отличалась. Все равно в разноске главное - время ожидания БД. Надо какую-то другую длительную операцию подобрать. Там где БД меньше дергается. |
|
23.08.2011, 13:32 | #5 |
Участник
|
я думаю, что если постараться, то можно найти такой код, который будет в 10 раз быстрее работать? но зачем?
|
|
23.08.2011, 14:49 | #6 |
Участник
|
Цитата:
=== ниже информация неофициальная и, возможно, ложная === Насколько я помню тупой код типа цикл с присваиванием переменной укоряется в 70 раз. Еще есть разные факторы - в .NET используется недетерминированный сборщик мусора, а в X++ детерминированный (он должен убрать мусор сразу как только нет на него ссылок). В результе X++ при каждом присваивании считает циклы - что дает квадратичный, кажется, прирост времени выполнения при присваиваниях полей классов с развесистым графом объектов, например, в разноске больших журналов. В-общем, попробуйте отпрофилировать TraceParserом ваши задачи. Еще следует учесть что включение HotSwapping помещает ваши сборки в отдельный домен, что дает некоторое увеличение времени вызова между вашим кодом и ax32serv |
|
|
За это сообщение автора поблагодарили: mazzy (2), Logger (5), alex55 (1). |
23.08.2011, 15:03 | #7 |
Участник
|
Цитата:
Не совсем понятно какие операции приводят к такому сканированию. И как этого избегать в своих разработках. |
|
23.08.2011, 16:14 | #8 |
Участник
|
Поддерживаю.
Не совсем понятно, что имеется в виду.
__________________
Axapta v.3.0 sp5 kr2 |
|
30.11.2011, 18:40 | #9 |
Участник
|
Цитата:
Сообщение от belugin
Еще есть разные факторы - в .NET используется недетерминированный сборщик мусора, а в X++ детерминированный (он должен убрать мусор сразу как только нет на него ссылок). В результе X++ при каждом присваивании считает циклы - что дает квадратичный, кажется, прирост времени выполнения при присваиваниях полей классов с развесистым графом объектов, например, в разноске больших журналов.
Т.е., например, такой метод : \Classes\InventUpd_Financial\parmLedgerVoucher X++: LedgerVoucher parmLedgerVoucher(LedgerVoucher _ledgerVoucher = ledgerVoucher)
{
;
ledgerVoucher = _ledgerVoucher;
return ledgerVoucher;
} X++: LedgerVoucher parmLedgerVoucher(LedgerVoucher _ledgerVoucher = null) { ; if ( !prmIsDefault(_ledgerVoucher) ) { ledgerVoucher = _ledgerVoucher; } return ledgerVoucher; } |
|
01.12.2011, 11:24 | #10 |
Участник
|
|
|
01.12.2011, 11:43 | #11 |
Участник
|
|
|
01.12.2011, 12:33 | #12 |
Ищущий знания...
|
Цитата:
Подробностей уже не помню, но точно помню, что закономерности в сбоях этой функции так и не нашел...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
01.12.2011, 17:14 | #13 |
Участник
|
Цитата:
Не факт, что присваивани, которое не изменяет полей объектов приводит к пересчету циклов. Попробуйте провести эксперимент. |
|
01.12.2011, 20:33 | #14 |
Участник
|
Цитата:
Когда я оптимизировал разноску закупки с 1000 строк и 8000 записей в логе корреспонденции, то выполнение этого метода \Classes\InventUpd_Financial\parmLedgerVoucher Стабильно длилось примерно 4,5 миллисекунды. Мелочь, конечно, можно и внимания не обращать, но для простого копирования ссылки все же многовато. |
|
23.08.2011, 13:49 | #15 |
Участник
|
В принципе незачем.
Просто интерес. |
|
23.08.2011, 15:07 | #16 |
Участник
|
Кстати, по поводу сборки мусора.
Интересно как это все в 2012-й работает. Он теперь там всегда недетерминированный ? Или есть отдельно куча .Net и отдельно X++ и обрабатываются они по разному ? Думаю это достаточно важный вопрос, так как в X++ в некоторых местах код явно закладывается на то что сразу после присваивания : X++: Object = null; |
|
23.08.2011, 16:41 | #17 |
Участник
|
Цитата:
X++, C# Comparison: Object Oriented Programming [AX 2012] Цитата:
In C#, the System.GC.Collect method in the .NET Framework can be called to start the garbage collector. There is no similar function in X++ because X++ uses a deterministic garbage collector.
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
23.08.2011, 16:53 | #18 |
Участник
|
|
|
23.08.2011, 16:36 | #19 |
Участник
|
Класический пример плохой работы сборщика мусора в АХ, это перекрестные ссылки между деревом и элементами дерева:
Dynamics AX Performance issue. Cross object references drawbacks Подробная информация о сборке мусора в X++ и .NET тут
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
|
За это сообщение автора поблагодарили: Logger (5). |
23.08.2011, 17:25 | #20 |
Участник
|
мне кажется просто не хотели переносить фокус на переработку IDE.
Само ядро AX интерпритирует код Х++ в P код, который по своей сути является чем-то вроде MSIL, но "не то"
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
Теги |
.net, x++, полезное, сборка мусора |
|
|