Максимальная длина строки на моей машине составляет 1 073 741 791 .
Видите ли, строки не ограничены целым числом, как принято считать.
За исключением ограничений памяти, строки не могут содержать более 2 30 ( 1 073 741 824 ) символов, поскольку Microsoft CLR (Common Language Runtime) накладывает ограничение в 2 ГБ. 33 больше, чем позволял мой компьютер.
Теперь, вот что вы можете попробовать сами.
Создайте новое консольное приложение C # в Visual Studio, а затем скопируйте / вставьте основной метод здесь:
static void Main(string[] args)
{
Console.WriteLine("String test, by Nicholas John Joseph Taylor");
Console.WriteLine("\nTheoretically, C# should support a string of int.MaxValue, but we run out of memory before then.");
Console.WriteLine("\nThis is a quickish test to narrow down results to find the max supported length of a string.");
Console.WriteLine("\nThe test starts ...now:\n");
int Length = 0;
string s = "";
int Increment = 1000000000; // We know that s string with the length of 1000000000 causes an out of memory exception.
LoopPoint:
// Make a string appendage the length of the value of Increment
StringBuilder StringAppendage = new StringBuilder();
for (int CharacterPosition = 0; CharacterPosition < Increment; CharacterPosition++)
{
StringAppendage.Append("0");
}
// Repeatedly append string appendage until an out of memory exception is thrown.
try
{
if (Increment > 0)
while (Length < int.MaxValue)
{
Length += Increment;
s += StringAppendage.ToString(); // Append string appendage the length of the value of Increment
Console.WriteLine("s.Length = " + s.Length + " at " + DateTime.Now.ToString("dd/MM/yyyy HH:mm"));
}
}
catch (OutOfMemoryException ex) // Note: Any other exception will crash the program.
{
Console.WriteLine("\n" + ex.Message + " at " + DateTime.Now.ToString("dd/MM/yyyy HH:mm") + ".");
Length -= Increment;
Increment /= 10;
Console.WriteLine("After decimation, the value of Increment is " + Increment + ".");
}
catch (Exception ex2)
{
Console.WriteLine("\n" + ex2.Message + " at " + DateTime.Now.ToString("dd/MM/yyyy HH:mm") + ".");
Console.WriteLine("Press a key to continue...");
Console.ReadKey();
}
if (Increment > 0)
{
goto LoopPoint;
}
Console.WriteLine("Test complete.");
Console.WriteLine("\nThe max length of a string is " + s.Length + ".");
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
Мои результаты были следующими:
Струнный тест, Николас Джон Джозеф Тейлор
Теоретически, C # должен поддерживать строку int.MaxValue, но мы запускаем
до этого не хватает памяти.
Это быстрый тест для сужения результатов, чтобы найти максимум
поддерживаемая длина строки.
Тест начинается ... сейчас:
s.Length = 1000000000 в 08.05.2009 12: 06
Возникло исключение типа 'System.OutOfMemoryException'. в
05.08.2009 12:06. После прореживания значение приращения
100000000.
Исключение типа 'System.OutOfMemoryException' было сгенерировано. в
05.08.2009 12:06. После прореживания значение приращения
10000000. s.Length = 1010000000 в 05.08.2009 12:06 s.Length = 1020000000 в 08.05.2009 12:06 s.Length = 1030000000 в 08.05.2009
12:06 s.Length = 1040000000 в 05.08.2009 12:06 s.Length = 1050000000
в 05/05/2019 12:06 s.Length = 1060000000 в 05.05.2009 12:06 s.Length
= 1070000000 от 08.05.2009 12: 06
Исключение типа 'System.OutOfMemoryException' было сгенерировано. в
05.08.2009 12:06. После прореживания значение инкремента равно 1000000.
s.Length = 1071000000 в 05.08.2009 12:06 s.Length = 1072000000 в
05.08.2009 12:06 s.Length = 1073000000 в 08.05.2009 12: 06
Исключение типа 'System.OutOfMemoryException' было сгенерировано. в
05.08.2009 12:06. После прореживания значение инкремента равно 100000.
s.Length = 1073100000 в 05.08.2009 12:06 s.Length = 1073200000 в
05/05/2019 12:06 s.Length = 1073300000 в 08/05/2019 12:06 s.Length =
1073400000 в 05.05.2009, 12:06 s.Length = 1073500000 в 08.05.2009
12:06 s.Length = 1073600000 в 05.08.2009 12:06 s.Length = 1073700000
в 08.05.2009 12: 06
Исключение типа 'System.OutOfMemoryException' было сгенерировано. в
05.08.2009 12:06. После прореживания значение инкремента равно 10000.
s.Length = 1073710000 в 05.08.2009 12:06 s.Length = 1073720000 в
05/05/2019 12:06 s.Length = 1073730000 в 08/05/2019 12:06 s.Length =
1073740000 от 08.05.2009 12: 06
Исключение типа 'System.OutOfMemoryException' было сгенерировано. в
05.08.2009 12:06. После прореживания значение инкремента равно 1000.
s.Length = 1073741000 в 08.05.2009 12: 06
Было сгенерировано исключение типа System.OutOfMemoryException. в
05.08.2009 12:06. После прореживания значение инкремента равно 100.
s.Length = 1073741100 в 05.08.2009 12:06 s.Length = 1073741200 в
05.08.2009 12:06 s.Length = 1073741300 в 05.08.2009 12:07 s.Length =
1073741400 в 05.05.2009, 12:07 s.Length = 1073741500 в 08.05.2009
12:07 s.Length = 1073741600 в 05.08.2009 12:07 s.Length = 1073741700
в 08.05.2009 12: 07
Исключение типа 'System.OutOfMemoryException' было сгенерировано. в
05.08.2009 12:07. После прореживания значение инкремента равно 10.
s.Length = 1073741710 в 05.08.2009, 12:07 s.Length = 1073741720 в
05.08.2009 12:07 s.Length = 1073741730 в 05.05.2009 12:07 s.Length =
1073741740 в 05.05.2009, 12:07 s.Length = 1073741750 в 08.05.2009
12:07 s.Length = 1073741760 в 05.08.2009 12:07 s.Length = 1073741770
в 05/05/2019 12:07 s.Length = 1073741780 в 05/05/2019 12:07 s.Length
= 1073741790 от 08.05.2009 12: 07
Было сгенерировано исключение типа System.OutOfMemoryException. в05.08.2009 12:07. После прореживания значение инкремента равно 1.
s.Length = 1073741791 в 05.08.2009 12: 07
Исключение типа 'System.OutOfMemoryException' было сгенерировано. в
05.08.2009 12:07. После прореживания значение Приращения равно 0. Тест
полный.
Максимальная длина строки - 1073741791.
Нажмите любую клавишу для продолжения.
Максимальная длина строки на моей машине - 1073741791.
Я был бы очень признателен, если бы люди могли опубликовать свои результаты в виде комментария ниже.
Будет интересно узнать, получают ли люди одинаковые или разные результаты.