Pull to refresh

Comments 10

Строковый ключ в map — это ад )
ставим -O3 и надеемся что сможем работать.
Не понял в чем сарказм. Не поленился написал тест:
    map<string,PropertyVariant> variant_props;
    volatile int integer = 0;
    string str = "Integer";

    clock_t start = clock();

    for( int i = 0; i < 1000000; i++ )
    {
        variant_props[str] = i;
        integer = variant_props[str];
    }

    clock_t end = clock();

    cout << "Elapsed: " << (double(end - start) / CLOCKS_PER_SEC) << endl;

Выполнение 1 миллиона итераций заняло 0.204 секунды.

А теперь объясните, зачем, в конкретно указанном мною применении, нужно бОльшее быстродействие?

Каждой задаче свое решение. В здравом уме я не предложу использовать свойства с доступом по текстовому параметру в решении для микроконтроллера (да и вообще язык С++ не для подобных целей).
хотите быстродействия — не используйте C++
Прям замкнутый круг выходит…
Чем больше растет мап, тем дольше в нем искать элемент со строковым ключом. В вашем примере в мапе 1 элемент. Вы набейте сотню элементов в мап и попробуйте по нему порыскать;)
Для начала попробуйте набить командную строку сотней параметров.

Но даже если вам это удастся, время на поиск увеличится незначительно.

В моем примере, на ста элементах, это заняло 0.551 сек, что сопоставимо со временем старта процесса.
Не понял при чем здесь командная строка. ИМХО, 0.5 секунд — это долго, но все зависит от поставленной задачи. Если вас устраивает такая производительность, то, конечно, все ОК. Но, если начнутся тормоза, то знаете где искать один из ботлнеков:)
В самом начале статьи я в скобочках указал (может быть не так прозрачно) область применения данного класса. Моей задачей было собрать параметры командной строки и передать их одним объектом по ссылке в классы, которым параметры нужны. При этом при добавлении новых параметров не требуется менять реализацию зависимых классов, и в случае, когда в классе не используется новый параметр даже не нужна повторная компиляция.

Более того, я разместил этот код специально в блоге «Ненормальное программирование», чтобы читатели понимали, что у этого кода нет никаких претензий на повсеместное использование. Как и у автора нет претензий на идеальность этого кода, о чем я тоже написал.

0.5 секунд это очень долго, но заметьте, речь идет о миллионе записей, с доступом по строке, и миллионе чтений, в мапе из ста параметров. В моем случае это десяток элементов, которые один раз пишутся и несколько раз читаются в классах, использующих эти параметры.

Просто не нужно пихать этот класс во все немыслимые места. Не уверен, что Java или C# справились бы с подобной задачей так же быстро. Однако сплошь и рядом в этих языках используются подобные паттерны. При этом никто не говорит о низкой эффективности, когда речь идет о читаемости кода и легкости поддержки.
Все-все-все. Беру свои слова в зад. Я именно то, что вы написали в последнем комменте, вам пытался объяснить, но вы и без меня все понимаете. Всех благ.
Sign up to leave a comment.

Articles

Change theme settings