170 похожих чатов

Есть ли противопоказания самопальной интернации строк в хэшсете? вводные данные:

боремся за память, 15-20 миллионов строк отжирают полтора гига. Уникальных - в пределах десятка тысяч. Предполагаем строки использовать примерно так:
string StringPool.GetOrAdd(string key).

За - память сохраним.
Против - перфоманс пострадает, очевидно. Возможно, придется еще и лок ставить, если адаптируем решение к мультипоточности.

Системный String.Intern не берем, т.к. оно строки хранит до выгрузки CLR, что неприемлемо.

13 ответов

30 просмотров

вы что-то переводите в строки или они сами по себе как-то существуют?

Ivan-Balanar Автор вопроса
Alexey Tkachenko
вы что-то переводите в строки или они сами по себе...

строки задают своего рода пути. Так сложилось исторически, менять это - значит погружаться в куда более плотный рефакторинг, нежели интернация строк.

А откуда берётся много одинаковых строк?

Ivan-Balanar Автор вопроса
Ilya Chernoudov
А откуда берётся много одинаковых строк?

много одинаковых "путей" у разных объектов :)

Ivan-Balanar Автор вопроса
Ilya Chernoudov
Они через stringfotlrmat создаются?

погляжу, но мы все-таки совсем не туда удалились. Я хотел бы знать про стринг пулы, нет ли у них роковых недостатков, о которых все в курсе, кроме меня?

Ivan Balanar
погляжу, но мы все-таки совсем не туда удалились. ...

На самом деле достаточно туда, так как мне вот в голову приходит InterpolatedStringHandler, который будет билдить строку через какойнибудь ArrayPool<char>, потом сразу же смотреть строку в пуле и, если что, возвращать её

IdiocyAcceptance
На самом деле достаточно туда, так как мне вот в г...

Точнее, идея в том, чтобы не создавать строку, а считать хеш по получившимся чарам и создавать строку только в случае, если её нет в пуле

Ivan-Balanar Автор вопроса
Ilya Chernoudov
Они через stringfotlrmat создаются?

В основном string.Format, но есть и Concat и просто +. Да, аллокации лишнии здесь возможны, но все-таки основное - что бы они хотя бы прибивались, а не плодили копии в памяти.

Ivan Balanar
В основном string.Format, но есть и Concat и прост...

Если делать пул, то непонятно как удалять оттуда объекты

Ivan Balanar
~10к можно и хранить

Они что ли статические?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта