Максимальна довжина струни на моїй машині - 1,073,741,791 .
Розумієте, рядки не обмежені цілим числом, як прийнято вважати.
Окрім обмежень на пам'ять, рядки не можуть містити більше 2 30 ( 1,073,741,824 ) символів, оскільки обмеження на 2 Гб накладається CLR Microsoft (Загальна мова виконання). На 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 на 05.08.2019 12:06
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.05.2019 12:06. Після децимації значення приросту становить 100000000.
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.05.2019 12:06. Після децимації значення приросту становить 10000000. s.Length = 1010000000 на 05.089 12:06 s.Length = 1020000000 на 05.08.2019 12:06 s.Length = 1030000000 на 05.08.2019 12 : 06 s.Length = 1040000000 в 08.08.2019 12:06 s.Length = 1050000000 в 08.08.2019 12:06 s.Length = 1060000000 в 08.08.2019 12:06 s.Length = 1070000000 в 05.08.2019 12:06
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.05.2019 12:06. Після децимації значення приросту становить 1000000. s.Length = 1071000000 на 05.08.2019 12:06 s.Length = 1072000000 на 05.08.2019 12:06 s.Length = 1073000000 на 05.08.2019 12 : 06
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.05.2019 12:06. Після децимації значення приросту становить 100000. s.Length = 1073100000 на 05.08.2019 12:06 s.Length = 1073200000 на 05.08.2019 12:06 s.Length = 1073300000 на 05.08.2019 12 : 06 s.Length = 1073400000 за 08.08.2019 12:06 s.Length = 1073500000 за 08.08.2019 12:06 s.Length = 1073600000 за 05.08.2019 12:06 s.Length = 1073700000 при 05.08.2019 12:06
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.05.2019 12:06. Після децимації значення приросту становить 10000. s.Length = 1073710000 на 05.08.2019 12:06 s.Length = 1073720000 на 05.08.2019 12:06 s.Length = 1073730000 на 05.08.2019 12 : 06 s.Length = 1073740000 в 05.08.2019 12:06
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.05.2019 12:06. Після децимації значення приросту становить 1000. s.Length = 1073741000 на 05.08.2019 12:06
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.05.2019 12:06. Після децимації значення приросту становить 100. s.Length = 1073741100 на 05.08.2019 12:06 s.Length = 1073741200 на 05.08.2019 12:06 s.Length = 1073741300 на 05.08.2019 12 : 07 s.Length = 1073741400 на 05.08.2019 12:07 s.Length = 1073741500 на 05.08.2019 12:07 s.Length = 1073741600 на 05.08.2019 12:07 s.Length = 1073741700 при 05.08.2019 12:07
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.08.2019 12:07. Після децимації значення приросту становить 10. s.Length = 1073741710 на 05.08.2019 12:07 s.Length = 1073741720 на 05.08.2019 12:07 s.Length = 1073741730 на 05.08.2019 12 : 07 s.Length = 1073741740 в 08.08.2019 12:07 s.Length = 1073741750 в 08.08.2019 12:07 s.Length = 1073741760 в 08.08.2019 12:07 s.Length = 1073741770 при 05.08.2019 12:07 s.Length = 1073741780 на 05.089 12:07 s.Length = 1073741790 на 05.08.2019 12:07
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.08.2019 12:07. Після децимації значення приросту становить 1. s.Length = 1073741791 на 05.08.2019 12:07
Виняток типу "System.OutOfMemoryException" було кинуто. на 05.08.2019 12:07. Після децимації значення приросту дорівнює 0. Тест завершено.
Максимальна довжина рядка - 1073741791.
Натисніть будь-яку кнопку, щоб продовжити.
Максимальна довжина струни на моїй машині - 1073741791.
Я дуже вдячний, якби люди могли розмістити свої результати як коментар нижче.
Буде цікаво дізнатися, чи отримують люди однакові чи різні результати.