Показать сообщение отдельно
Старый 18.02.2019, 11:01   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 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).