Способ уменьшения кэшированной памяти структурами в c ++ - PullRequest
0 голосов
/ 29 апреля 2020

Я использовал некоторые структуры для кэширования какого-то временного списка. И я хотел бы найти некоторые решения по сокращению выделенной памяти для поддержания производительности. Компоненты структуры приведены ниже.

structure LatestInfo
{
        std::string visitedWebsites;
        std::string watchedVideo;
        std::string userId;
        std::string userName;
        unsigned int lastLoginTime;
        std::string contentsRating;
        //and so on
}

И у меня есть std::vector<LatestInfo> latestList для хранения LatestInfo структуры.

Есть много LastestInfo в latestList, и оно становится больше.

Таким образом, в нашей системе выделяется много памяти (более 200 МБ).

Не только LatestInfo регулярно обновляется (каждые 2 часа), но и производительность очень важна, мы храним некоторые фиксированные значения только в БД (SQLite).

Итак, я хотел бы уменьшить выделенную память без использования БД.

IMO, если std :: string может быть сжатым, это было бы хорошо и потребовало бы минимальных изменений. Знаете ли вы какие-нибудь открытые исходные коды или библиотеки для сжатия, чтобы уменьшить выделенную память?

или у вас есть лучшие решения?

Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2020

Если в ваших строках много дубликатов, вы можете использовать «интернирование строк», когда у вас есть только одна копия данных строки, а затем указатели на нее: https://en.wikipedia.org/wiki/String_interning

Вот библиотека C ++, которая делает это за вас (я этим не пользовался, просто появилась в моем поиске в Google): https://github.com/RipcordSoftware/libstringintern

...