боремся за память, 15-20 миллионов строк отжирают полтора гига. Уникальных - в пределах десятка тысяч. Предполагаем строки использовать примерно так: 
                  
                  
                  string StringPool.GetOrAdd(string key).
                  
                  
                  
                  
                  
                  За - память сохраним.
                  
                  
                  Против -  перфоманс пострадает, очевидно. Возможно, придется еще и лок ставить, если адаптируем решение к мультипоточности.
                  
                  
                  
                  
                  
                  Системный String.Intern не берем, т.к. оно строки хранит до выгрузки CLR, что неприемлемо.
                  
                  
                
вы что-то переводите в строки или они сами по себе как-то существуют?
 Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  строки задают своего рода пути. Так сложилось исторически, менять это - значит погружаться в куда более плотный рефакторинг, нежели интернация строк.
А откуда берётся много одинаковых строк?
 Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  много одинаковых "путей" у разных объектов :)
Они через stringfotlrmat создаются?
 Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  погляжу, но мы все-таки совсем не туда удалились. Я хотел бы знать про стринг пулы, нет ли у них роковых недостатков, о которых все в курсе, кроме меня?
Особых вариантов не много
На самом деле достаточно туда, так как мне вот в голову приходит InterpolatedStringHandler, который будет билдить строку через какойнибудь ArrayPool<char>, потом сразу же смотреть строку в пуле и, если что, возвращать её
Точнее, идея в том, чтобы не создавать строку, а считать хеш по получившимся чарам и создавать строку только в случае, если её нет в пуле
 Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  В основном string.Format, но есть и Concat и просто +. Да, аллокации лишнии здесь возможны, но все-таки основное - что бы они хотя бы прибивались, а не плодили копии в памяти.
Если делать пул, то непонятно как удалять оттуда объекты
 Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Balanar
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  ~10к можно и хранить
Они что ли статические?
Обсуждают сегодня