AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.01.2008, 16:30   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Blog bot Посмотреть сообщение
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!
Могу ошибаться, но мне кажется что диагностировали проблему неправильно.
Уменьшение скорости происходит не из-за того, что расширяется базовый класс.
А из-за того, что просто расширяется.

Другими словами. Скорее всего:
1. любой класс без наследников работает быстро
2. любой наследник работает медленнее (поскольку появляются виртуальные методы)
3. будет ли замедление при запуске root-класса, у которого есть наследники - не знаю.

В общем, надо тестировать.
Но сильно подозреваю, что проблема не в "базовости" класса.
__________________
полезное на axForum, github, vk, coub.
Старый 09.01.2008, 12:02   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Я я думаю что системные классы реализованы на С++, а наследованные выполняются в байткоде оттого и разница
Старый 09.01.2008, 12:26   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Я я думаю что системные классы реализованы на С++, а наследованные выполняются в байткоде оттого и разница
Ох, сомневаюсь
Хотя нужно всего лишь протестировать.

Ведь что значит "реализованы на C++". Это значит, что сам код в в машинных кодах. Но вызывается тот же менеджер памяти, та же сборка мусора, что и для байт кода... Если речь идет о реализации сравнения и сортировки... То в списке они не используются, а замедление есть и там.

В свое время были аналогичные тесты и результаты при сравнении процедурных и ООП подходов. Также показывалось, что виртуальные методы приводят к сильному замедлению. Пока не придумали сравнительно быструю реализацию через таблицу ссылок на методы. Думаю, что и здесь что-то похожее.
__________________
полезное на axForum, github, vk, coub.
Старый 09.01.2008, 12:37   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Я думаю, в аксапте все методы виртуальные, а вызываются по имени. Потому что пока не

X++:
List x;
;
x.addEnd()
addEnd вызовется всегда что бы не присвоить x главное, чтоб метод был с таким именем.
Старый 09.01.2008, 12:51   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Я думаю, в аксапте все методы виртуальные, а вызываются по имени.
Не в Аксапте, а в Джаве
Насчет того, что вызывается по имени - сильно сомневаюсь. Но надо тестировать.

Цитата:
Сообщение от belugin Посмотреть сообщение
addEnd вызовется всегда что бы не присвоить x главное, чтоб метод был с таким именем.
Нет, не всегда. addEnd вызовется только если метод скомпилируется.
А метод скомпилируется только в том случае, если такой метод есть, либо x имеет тип Object. (Object - действительно не выполняет проверку на этапе компиляции)

В общем, надо тестировать.
__________________
полезное на axForum, github, vk, coub.
Старый 09.01.2008, 13:21   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Имеется ввиду
X++:
class MyClass
{
     void addEnd(AnyType _x);
     {
     }
}
Object o = new MyClass();
List l = o;
;
l.addEnd('1');
addEnd вызовется какой бы тип реально не был, у того. что лежит в x. Главное, чтобы имя совпаадало.

Я думаю там даже нет смолтоковской оптимизации (когда есть глобыльный писок имен методов, а реально передается его номер в этом списке)

Так как для этого нужен некий интеллект при работе с COM обектами, а Модель Ленивого Программиста подсказвает мне что его не сделали.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
axStart: Microsoft Dynamics AX 2009 White Paper: Team Foundation Server Version Control Setup Blog bot DAX Blogs 0 27.07.2008 13:06
axStart: Why performance issues hits you’re AX implementation 3 months after going live. Blog bot DAX Blogs 0 05.03.2008 05:47
Передача функции в качестве параметра lemchey_white DAX: Программирование 20 21.01.2008 22:51
axStart: use AX classes in your interface Blog bot DAX Blogs 0 15.12.2007 01:11

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:04.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.