Boost flyweight для коротких струн

Я внедряю систему, которая хранит и манипулирует множеством повторяющихся коротких строк. Например, цена акций серии. У меня будет много повторяющихся записей о ценах на акции Microsoft:

<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00

Я думаю об использовании Boost::Flyweight чтобы оптимизировать выделение памяти, стоимость поиска / сравнения / копирования строк этих небольших повторяющихся имен тикеров (например, MSFT в данном случае).

Но дело в том, что эти строки довольно малы — обычно всего несколько байтов. Пока длинный тип составляет 8 байт уже в современных компьютерах. Стоит ли использовать Boost::Flyweight в этом случае?

Мое понимание Boost::Flyweight заключается в том, что интернализованные строки являются целыми числами для повышения производительности. Но я думаю, что поиск / сравнение / копирование 8-байтовой строки не сильно отличается от работы с 8-байтовым типом данных. Так стоит ли переходить к Boost::Flyweight ?

Моя главная цель — скорее оптимизация скорости, чем оптимизация памяти, если мне придется выбирать одну.

2

Решение

Flyweight очень универсальный и настраиваемый.

Я бы предложил использовать поддержку строк, выделенных из одного пула памяти фиксированного размера (например, std::vector<CharType>). Вам тогда нужно будет только вернуться std::string_views диапазон байтов в резервном хранилище.

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

В качестве альтернативы, вы можете «свернуть свое». У меня есть несколько примеров этого на StackOverflow:

Мой опыт работы с Flyweight изменился (https://stackoverflow.com/search?tab=votes&д = Пользователь% 3a85371% 20flyweight, например увеличить multi_index_container и медленный оператор ++). Кажется, что наивная реализация Flyweight редко бывает то, что вы хотите.

ОБНОВИТЬ Просто вспомнил эту связанную демонстрацию, которую я сделал, используя Perfect Hashing для символов тикера NASDAQ: Можно ли отобразить строку в int быстрее, чем при использовании hashmap?

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector