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

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

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

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

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

13 ответов

11 просмотров

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

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к можно и хранить

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

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
Карта сайта