08.01.2008, 16:30 | #1 |
Участник
|
axStart: don't extend AX foundation classes, you lose performance
Источник: http://axstart.spaces.live.com/Blog/...C0A0!222.entry
============== I received a quite interesting test from an AX partner in the Netherlands (TOINCREASE). They did a resurge about the performance with AX foundation classes. They want to know if it is better to extend from the foundation classes or simply use them the way they are. Advantages of using kernel classes Those classes are fast and easy to use. And if you need extra functionality this is based on the kernel class. For example: if you need extra functionality for a struct (to copy), then this usable for all the structs. Advantages of using kernel extended classes All the specific methods can be added to the kernel class. So it’s easier to access those methods. Maintainability is better and object oriented. Test Results: Option List Map Struct Extended class with overwriting standard methods Extended class without overwriting standard Speed to add and read 10.000 items 0,27 s 0,40 s 0,41 s 0,87 s 0,48 s Run time in Percentage 100% 148% 151% 322% 177% Possibility to read based on adding sequence X X X X Can be read in alphabetical order X X Has a index property X X X Can remove based on key X X X X Can find item based on key X X X X Can find item based on index X X X Can have multiple types in one field Can contain extra methods X X conclusions: 1) Never extend base classes like struct, map, list etc. By extending the base class the performance will slow down by a factor 2 or 3! 2) Struct and map are both running on almost the same speed! This is not the big difference as everybody thought! 3) Extending a class slows down the process! Also if you do not overwrite any method! Источник: http://axstart.spaces.live.com/Blog/...C0A0!222.entry
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
09.01.2008, 11:38 | #2 |
Участник
|
Цитата:
Уменьшение скорости происходит не из-за того, что расширяется базовый класс. А из-за того, что просто расширяется. Другими словами. Скорее всего: 1. любой класс без наследников работает быстро 2. любой наследник работает медленнее (поскольку появляются виртуальные методы) 3. будет ли замедление при запуске root-класса, у которого есть наследники - не знаю. В общем, надо тестировать. Но сильно подозреваю, что проблема не в "базовости" класса. |
|
09.01.2008, 12:02 | #3 |
Участник
|
Я я думаю что системные классы реализованы на С++, а наследованные выполняются в байткоде оттого и разница
|
|
09.01.2008, 12:26 | #4 |
Участник
|
Цитата:
Хотя нужно всего лишь протестировать. Ведь что значит "реализованы на C++". Это значит, что сам код в в машинных кодах. Но вызывается тот же менеджер памяти, та же сборка мусора, что и для байт кода... Если речь идет о реализации сравнения и сортировки... То в списке они не используются, а замедление есть и там. В свое время были аналогичные тесты и результаты при сравнении процедурных и ООП подходов. Также показывалось, что виртуальные методы приводят к сильному замедлению. Пока не придумали сравнительно быструю реализацию через таблицу ссылок на методы. Думаю, что и здесь что-то похожее. |
|
09.01.2008, 12:37 | #5 |
Участник
|
Я думаю, в аксапте все методы виртуальные, а вызываются по имени. Потому что пока не
X++: List x; ; x.addEnd() |
|
09.01.2008, 12:51 | #6 |
Участник
|
Не в Аксапте, а в Джаве
Насчет того, что вызывается по имени - сильно сомневаюсь. Но надо тестировать. Цитата:
А метод скомпилируется только в том случае, если такой метод есть, либо x имеет тип Object. (Object - действительно не выполняет проверку на этапе компиляции) В общем, надо тестировать. |
|
09.01.2008, 13:21 | #7 |
Участник
|
Имеется ввиду
X++: class MyClass { void addEnd(AnyType _x); { } } Object o = new MyClass(); List l = o; ; l.addEnd('1'); Я думаю там даже нет смолтоковской оптимизации (когда есть глобыльный писок имен методов, а реально передается его номер в этом списке) Так как для этого нужен некий интеллект при работе с COM обектами, а Модель Ленивого Программиста подсказвает мне что его не сделали. |
|
|
|