Я бы предложил посмотреть документацию на потоки. Это может помочь.
Другой способ приблизиться к нему - это разделить его. Что касается вашего последнего комментария о том, что вы хотите сохранить его как ByteArray
с UTF8, вам понадобится char[]
, как и вы потеряете свою кодировку. Я бы рекомендовал разделить его на несколько небольших строк (или char[]
s), хранящихся в отдельных объектах, которые можно легко восстановить. Что-то вроде этого может быть достаточно, создать много StringSlice
S:
public class StringSlice()
{
public Str {get;}
public Index {get;}
public StringSlice(string str, int index)
{
this.Str = str;
this.Index = index;
}
public static List<string> ReconstructString(IEnumerable<StringSlice> parts)
{
//Sort input by index return list with new strings in order. Probably have to use a buffer on the disc so as not to breach 2GB obj limit.
}
}
В сущности, что вы будете делать здесь, похоже на то, как интернет-пакеты расщепляются и реконструированы. Я не совсем уверен, ответил ли я на ваш вопрос, но, надеюсь, это поможет вам.
Есть ли шанс, что вы могли бы избежать создания такого огромного StringBuilder для начала? Это возможно, чтобы потопить это, но это довольно много работы ... возможно, лучше пересмотреть свой подход. –
Максимальный размер любого объекта в .NET составляет 2 ГБ. Однако посмотрите [this] (https://msdn.microsoft.com/en-us/library/hh285054 (v = vs.110) .aspx). – itsme86
Просто * не создавайте такой StringBuilder, это не его работа. StringBuilder предназначен для упрощения построения строки, а не для работы в качестве буфера. Вместо этого используйте «StreamWriter» с кодировкой UTF8, который выводит все, что вы хотите для адресата. Используйте большой буфер, если обнаружите, что на диск слишком много записей. По умолчанию 8 КБ Я думаю –