Какую самую длинную строку можно создать в .NET? String
Насколько мне известно, в документах для класса об этом вопросе ничего не говорится, поэтому для авторитетного ответа могут потребоваться некоторые знания внутренних органов. Изменится ли максимум в 64-битной системе?
[Это спрашивает больше о любопытстве, чем о практическом использовании - я не собираюсь создавать какой-либо код, который использует гигантские строки!]
byte[]
.Исходя из моего очень научного и точного эксперимента, он превосходит мою машину задолго до 1 000 000 000 символов. (Я все еще использую приведенный ниже код, чтобы получить лучшее определение).
ОБНОВЛЕНИЕ: Через несколько часов я сдался. Окончательные результаты: может превышать 100 000 000 символов, мгновенно получая
System.OutOfMemoryException
1 000 000 000 символов.источник
Поскольку
Length
свойствоSystem.String
is являетсяInt32
, я предполагаю, что максимальная длина будет 2147483647 символов (максимальныйInt32
размер). Если это позволит больше, вы не можете проверить длину, так как это не получится.источник
LongLength
так же и поток использования вlong
качестве длины. Хотя это правильный ответ, но это точный способ измерить это.Для тех, кто опаздывает на эту тему поздно, я мог видеть, что из-за хитскана "вы, вероятно, не должны этого делать" кто-то может спросить, что он должен делать ...
Класс StringBuilder часто является легкой заменой. Рассмотрим один из потоковых классов, особенно если ваши данные поступают из файла.
Проблема
s += "stuff"
заключается в том, что ему нужно выделить совершенно новую область для хранения данных, а затем скопировать в нее все старые данные, а также новый материал - КАЖДУЮ И КАЖДУЮ Итерацию цикла. Таким образом, добавление пяти байтов к 1000000 сs += "stuff"
очень дорого. Если вам нужно просто написать пять байтов до конца и продолжить свою программу, вам нужно выбрать класс, который оставляет место для роста:StringBuilder
будет автоматически расти при удвоении, когда достигнут предел. Итак, вы увидите боль роста один раз в начале, один раз на 5000 байтов, снова на 10 000, снова на 20 000. Добавление строк будет причинять боль при каждой итерации цикла.источник
Максимальная длина строки на моей машине составляет 1 073 741 791 .
Видите ли, строки не ограничены целым числом, как принято считать.
Помимо ограничений памяти, строки не могут содержать более 2 30 ( 1 073 741 824 ) символов, поскольку Microsoft CLR (Common Language Runtime) устанавливает ограничение в 2 ГБ. 33 больше, чем позволил мой компьютер.
Теперь, вот что вы можете попробовать сами.
Создайте новое консольное приложение C # в Visual Studio, а затем скопируйте / вставьте основной метод здесь:
Мои результаты были следующими:
Максимальная длина строки на моей машине составляет 1073741791.
Я был бы очень признателен, если бы люди могли опубликовать свои результаты в виде комментария ниже.
Будет интересно узнать, получают ли люди одинаковые или разные результаты.
источник
200 мегабайт ... в этот момент ваше приложение переходит в режим виртуальной остановки, у него есть память рабочего набора, и операционная система начинает работать так, как будто вам нужно перезагрузиться.
источник
Поскольку
String.Length
это целое число (то есть псевдонимInt32
), его размер ограниченInt32.MaxValue
символами Юникода. ;-)источник