У меня есть приложение, которое использует boost::interprocess::map
в общей памяти. Карта содержит большое количество элементов (от 100 к до 10 М), и все работает очень хорошо, за одним исключением: необходимо периодически очищать карту, и это, по-видимому, занимает около 4 мкс на элемент (что в худшем случае 40 секунд), что неприемлемо для приложения. Похоже, что clear()
фактически удаляет каждый элемент карты отдельно и ребалансирует дерево после каждого удаления, поэтому он ужасно неэффективен, когда у вас есть большое количество элементов. В идеале clear()
просто удалил бы все элементы без какого-либо перебалансирования - можно ли каким-либо образом реализовать такой оптимизированный метод clear()
?
(Кстати, я также пробовал boost:interprocess:flat_map
- это намного быстрее, чем можно было ожидать (в 10 раз быстрее), но это слишком медленно для операций вставки/удаления.)
Примечание. qaru.site/info/309499/... затронул аналогичную проблему с меньшими картами STL в нормальной (то есть не общей) памяти, но на самом деле не решила проблему.