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, 13:49 | #6 |
Участник
|
В принципе незачем.
Просто интерес. |
|
23.08.2011, 14:49 | #7 |
Участник
|
Цитата:
=== ниже информация неофициальная и, возможно, ложная === Насколько я помню тупой код типа цикл с присваиванием переменной укоряется в 70 раз. Еще есть разные факторы - в .NET используется недетерминированный сборщик мусора, а в X++ детерминированный (он должен убрать мусор сразу как только нет на него ссылок). В результе X++ при каждом присваивании считает циклы - что дает квадратичный, кажется, прирост времени выполнения при присваиваниях полей классов с развесистым графом объектов, например, в разноске больших журналов. В-общем, попробуйте отпрофилировать TraceParserом ваши задачи. Еще следует учесть что включение HotSwapping помещает ваши сборки в отдельный домен, что дает некоторое увеличение времени вызова между вашим кодом и ax32serv |
|
|
За это сообщение автора поблагодарили: mazzy (2), Logger (5), alex55 (1). |
23.08.2011, 15:03 | #8 |
Участник
|
Цитата:
Не совсем понятно какие операции приводят к такому сканированию. И как этого избегать в своих разработках. |
|
23.08.2011, 15:07 | #9 |
Участник
|
Кстати, по поводу сборки мусора.
Интересно как это все в 2012-й работает. Он теперь там всегда недетерминированный ? Или есть отдельно куча .Net и отдельно X++ и обрабатываются они по разному ? Думаю это достаточно важный вопрос, так как в X++ в некоторых местах код явно закладывается на то что сразу после присваивания : X++: Object = null; |
|
23.08.2011, 16:14 | #10 |
Участник
|
Поддерживаю.
Не совсем понятно, что имеется в виду.
__________________
Axapta v.3.0 sp5 kr2 |
|
23.08.2011, 16:36 | #11 |
Участник
|
Класический пример плохой работы сборщика мусора в АХ, это перекрестные ссылки между деревом и элементами дерева:
Dynamics AX Performance issue. Cross object references drawbacks Подробная информация о сборке мусора в X++ и .NET тут
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
|
За это сообщение автора поблагодарили: Logger (5). |
23.08.2011, 16:41 | #12 |
Участник
|
Цитата:
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 | #13 |
Участник
|
|
|
23.08.2011, 17:25 | #14 |
Участник
|
мне кажется просто не хотели переносить фокус на переработку IDE.
Само ядро AX интерпритирует код Х++ в P код, который по своей сути является чем-то вроде MSIL, но "не то"
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
23.08.2011, 17:37 | #15 |
Участник
|
Не совсем понимаю, в чем проблема.
А что вы подразумеваете под Managed языком ? Последний раз редактировалось Logger; 23.08.2011 в 17:57. |
|
23.08.2011, 18:59 | #16 |
Участник
|
Цитата:
Проблема была в том, что МС не хотели ламать то, что уже было в АХ. Они просто берут Р код, созданный компилятором, и его переводят потом в MSIL, а MSIL, как известно, может быть интерпритирован в любой язык, поддерживаемый .NET платформой. Но сам по себе X++ так и не стал "новым официальным языком .NET". Это было скорее стратегиское решение. Думаю что в последующих версиях X++ будет становиться все меньше и меньше, пока они полностью не перейдут на Managed код.
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
23.08.2011, 20:42 | #17 |
Участник
|
Где-то проходила инфа что x++ чуть ли не Visual Studio появится. Возможно передумали.
|
|
23.08.2011, 21:34 | #18 |
Участник
|
Цитата:
Сообщение от plumbum
Класический пример плохой работы сборщика мусора в АХ, это перекрестные ссылки между деревом и элементами дерева:
Dynamics AX Performance issue. Cross object references drawbacks По-моему, больше похоже на проблемы с быстродействие самого TreeView при большом количестве элементов и уровне вложенности. И с большим расходом памяти на непонятно зачем нужные объекты (я про хранение ссылок на FormTreeItem) Цитата:
Сообщение от plumbum
Подробная информация о сборке мусора в X++ и .NET тут
Что это за циклы в каждом присваивании на X++?
__________________
Axapta v.3.0 sp5 kr2 |
|
24.08.2011, 00:19 | #19 |
Участник
|
Была в блоге команды разработчиков X++ статья X++: Garbage Collection and Ax Performance Whitepaper (занятно, сейчас ее в блоге не найти), там объяснялось, что детерминированный сборщик мусора в X++ поддерживает для каждого объекта два счетчика: один - для учета ссылок на объект (reference count) и второй - для учета "петель" ссылок (loop count), в которых участвует объект.
Объект не подлежит уничтожению до тех пор, пока число ссылок на него больше числа "петель" ссылок, в которых он участвует. Так вот, при каждом присваивании переменной ссылки на тот или иной объект сборщик мусора должен не только увеличить счетчик ссылок на этот объект, но и по графу ссылок между объектами пересчитать счетчик "петель" для него. А длительность последней операции с увеличением числа связанных между собой объектов имеет тенденцию расти экспоненциально. Последний раз редактировалось gl00mie; 24.08.2011 в 00:30. Причина: еще картинка |
|
|
За это сообщение автора поблагодарили: Logger (5), plumbum (1), Mileyko (1). |
24.08.2011, 00:52 | #20 |
Участник
|
Цитата:
Не уловил, в чем здесь пример плохой работы GC.
К сожалению не нашел сразу ссылку на вышеуказанную статью. Моя ссылка на MSDN подтверждала то, что GC в X++ детерминированный (там так и было написано). Вот сейчас из блогов пришла статья о возможности скомпилировать X++ в IL. X++ in the .NET CLR : Life in the Fast Lane Там ремарка, о том, что при отладке IL, созданного из X++, код последнего выбирается фактически из AOT, а вот выполняется как раз прекомпилированная сборка. Я так понимаю, что обратное преобразование из IL в X++ не реализовано. Посему и не считаю что X++ таки стал Managed .NET Language.
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! Последний раз редактировалось plumbum; 24.08.2011 в 01:14. |
|
|
За это сообщение автора поблагодарили: Logger (1). |
Теги |
.net, x++, полезное, сборка мусора |
|
|