StringBuilder обычно считается лучшим вариантом, но в этом случае я бы не использовал ни .
Даже с StringBuilder, с такой скоростью, основной символьный буфер вскоре сам станет достаточно большим, чтобы застрять в куче больших объектов. Это создаст проблемы для работоспособности приложения, которое должно некоторое время работать.
Вместо этого я бы использовал System.Collections.Generic.List<string>
и просто вызывал бы метод .Add()
для каждого нового сообщения. В зависимости от того, что вы делаете с этими сообщениями, вы также можете найти другой тип коллекции более подходящим (возможно, Queue<string>
), но это направление, в котором вы должны идти. При использовании коллекции память, используемая каждой отдельной строкой, не будет учитываться в размере объекта коллекции. Вместо этого каждая строка будет добавлять только несколько байтов для ссылки. Это займет гораздо больше времени, чтобы столкнуться с проблемами при сжатии кучи больших объектов.
Если после переключения на коллекцию у вас все еще есть проблемы, вы можете использовать stream и записать строки на диск. Таким образом, у вас никогда не будет более одной строки в оперативной памяти за раз. Теперь у вас могут возникнуть проблемы только в том случае, если отдельные строки имеют размер 85000 байт или более.