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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.02.2019, 11:01   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от dech Посмотреть сообщение
Любая коллекция упрощает понимание кода. Коллекции позволяют работать на более высоком уровне абстракций.
Вопрос спорный и не однозначный. Зависит от конкретной задачи и личных предпочтений разработчика В данной задаче - все наоборот.

Цитата:
Сообщение от dech Посмотреть сообщение
Может и утяжеляет в плане производительности, но насколько? Что нам стоит выделить память под несколько объектов? Не встанет же аксапта колом?
Если вопрос "вообще", то вполне может! Объекты map (имею в виду коллекции) требуют большое количество оперативной памяти. При небольшом количестве элементов (как в данной задаче) - это не критично. Но если речь идет хотя бы о нескольких сотнях элементов, то это чудовищные потери производительности и просто гигантские затраты оперативной памяти.

Показательный пример - это классы работы с оборотно-сальдовыми ведомостями в Dax2009. Чудовищные тормоза и простая замена map на временные таблицы дает резкий скачок производительности даже без оптимизации остального кода.

В данной-то задаче это не критично, но, повторюсь, пихать мапы везде, потому что это "упрощает понимание кода" и "более высокий уровень абстракции" - не стоит. Надо понимать, что придется "принести в жертву" производительность.

Цитата:
Сообщение от dech Посмотреть сообщение
Предлагаю пересмотреть ваше отношение к коллекциям.
Так я не против. Просто нельзя бездумно лепить их везде, где это теоретически возможно.

Цитата:
Сообщение от dech Посмотреть сообщение
Можно и так, с появлением TFS комментарии теперь особо и не нужны. Пишу по регламенту разработки.
Я к тому, что замена на map, по сути, означает полное переписывание кода. Не исправление замеченных ошибок и недоработок, а именно полная замена. И отдельные вкрапления старого кода Это в принципе другая идеология написания кода.


В принципе, тут вообще не нужны ни контейнеры, ни map. Я не понимаю, почему не сконструировали команду Select-SQL за один проход по списку полей индекса. Ну, что-то вроде такого

X++:
strSelectList += ' count(*)';
fleldNum = 1;

    if (dataPrCompany)
    {
        fleldNum++;
        strSelectList += ', dataAreaId';
        strGroupList += ', dataAreaId';
        strOrderList += ', ' + int2str(fieldnum);
    }

    for (i = 1; i <= numberOfFields; i++)
    {
        if (...)
        {
            fleldNum++;
            strSelectList += ', ' + fieldname;
            strGroupList += ', ' + fieldname;
            strOrderList += ', ' + int2str(fieldnum);
        }
    }


    stmtStr = 'select ' + strSelectList + 
                   'from ... group by ' + strGroupList + 
                   ' order by ' + strOrderList;

(...)
Это не полноценный код, разумеется. Просто, чтобы показать идею. Здесь контейнер или коллекция нужны разве что для вменяемого сообщения в случае наличия дублей. Да и наполнение этого контейнера/мапа делается там же, в основном (и единственном!) цикле

Здесь разработчик явно действовал "по шаблону". Причем взятому откуда-то из другого класса. Вот и получил то, что получил. Тоже, вероятно, думал об "абстракциях"

Но! Повторюсь, это будет уже не исправление существующего кода, а написание нового. В духе личных предпочтений
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Daiver (1).
Старый 19.02.2019, 13:03   #2  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Дела давно минувших дней Кнопка "Add-ins\Дубликаты" на табличных индексах в АОТ
__________________
Sergey Nefedov
Старый 19.02.2019, 16:55   #3  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от SRF Посмотреть сообщение
Дела давно минувших дней
Оффтоп: Сергей, Ваша ссылка в подписи http://itmagnet.ru/ ведет в никуда.
Старый 19.02.2019, 13:16   #4  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение

В принципе, тут вообще не нужны ни контейнеры, ни map. Я не понимаю, почему не сконструировали команду Select-SQL за один проход по списку полей индекса. Ну, что-то вроде такого
Видимо потому, что использовались разные СУБД, не только SQL для более младших версий и поэтому запрос генерировался не прямой, с учетом используемой СУБД (конечно их было не 10, а гораздо меньше, но могли влиять и какие то параметры АОСа), ну а от версии к версии, как правило, MS рефакторингом\оптимизацией кода не занимается, только правит с учетом специфики новой
__________________
Sergey Nefedov
Теги
duplicates, index, sysdictindex, баг, индекс, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Баг или фича - неожиданное поведение метода xRecord.data() Pandasama DAX: Программирование 3 21.03.2016 13:01
AX 2012 Пересчет единиц измерения - баг или фича? Kabardian DAX: Функционал 3 25.02.2014 11:00
Баг или не баг? Murlin DAX: Программирование 53 14.09.2013 18:52
Баг при печати налогового кода petr DAX: Программирование 0 25.03.2009 16:33
баг в 2.5. Будьте осторожнее с символом "_" подчеркивание levsha DAX: Программирование 5 07.12.2004 12:26

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:51.