La lunghezza massima di una stringa sulla mia macchina è 1.073.741.791 .
Vedete, le stringhe non sono limitate dall'intero come si ritiene comunemente.
A parte le restrizioni di memoria, le stringhe non possono avere più di 2 30 ( 1.073.741.824 ) caratteri, poiché un limite di 2 GB è imposto dal CLR (Common Language Runtime). 33 in più del mio computer consentito.
Ora, ecco qualcosa che puoi provare tu stesso.
Crea una nuova app console C # in Visual Studio e copia / incolla qui il metodo principale:
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();
}
I miei risultati sono stati i seguenti:
Test delle corde, di Nicholas John Joseph Taylor
Teoricamente, C # dovrebbe supportare una stringa di int.MaxValue, ma prima di allora abbiamo esaurito la memoria.
Questo è un test rapido per restringere i risultati per trovare la lunghezza massima supportata di una stringa.
Il test inizia ... ora:
Lunghezza = 1000000000 all'08 / 05/2019 12:06
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:06. Dopo la decimazione, il valore di Incremento è 100000000.
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:06. Dopo la decimazione, il valore di Incremento è 10000000. s.Lunghezza = 1010000000 all'08 / 05/2019 12:06 s.Lunghezza = 1020000000 all'08 / 05/2019 12:06 s.Lunghezza = 1030000000 all'08 / 05/2019 12 : 06 s.Length = 1040000000 at 08/05/2019 12:06 s.Length = 1050000000 at 08/05/2019 12:06 s.Length = 1060000000 at 08/05/2019 12:06 s.Length = 1070000000 at 08/05/2019 12:06
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:06. Dopo la decimazione, il valore di Incremento è 1000000. s.Lunghezza = 1071000000 all'08 / 05/2019 12:06 s.Lunghezza = 1072000000 all'08 / 05/2019 12:06 s.Lunghezza = 1073000000 all'08 / 05/2019 12 : 06
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:06. Dopo la decimazione, il valore di Incremento è 100000. Lunghezza = 1073100000 al 08/05/2019 12:06 Lunghezza = 1073200000 al 08/05/2019 12:06 Lunghezza = 1073300000 al 08/05/2019 12 : 06 s.Length = 1073400000 at 08/05/2019 12:06 s.Length = 1073500000 at 08/05/2019 12:06 s.Length = 1073600000 at 08/05/2019 12:06 s.Length = 1073700000 at 08/05/2019 12:06
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:06. Dopo la decimazione, il valore di Incremento è 10000. s.Lunghezza = 1073710000 al 08/05/2019 12:06 s.Lunghezza = 1073720000 al 08/05/2019 12:06 s.Lunghezza = 1073730000 al 08/05/2019 12 : 06 s.Lunghezza = 1073740000 al 08/05/2019 12:06
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:06. Dopo la decimazione, il valore di Incremento è 1000. Lunghezza s = 1073741000 al 08/05/2019 12:06
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:06. Dopo la decimazione, il valore di Incremento è 100. s.Lunghezza = 1073741100 all'08 / 05/2019 12:06 s.Lunghezza = 1073741200 all'08 / 05/2019 12:06 s.Lunghezza = 1073741300 all'08 / 05/2019 12 : 07 s.Length = 1073741400 at 08/05/2019 12:07 s.Length = 1073741500 at 08/05/2019 12:07 s.Length = 1073741600 at 08/05/2019 12:07 s.Lunghezza = 1073741700 at 08/05/2019 12:07
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:07. Dopo la decimazione, il valore di Incremento è 10. s.Lunghezza = 1073741710 al 08/05/2019 12:07 s.Lunghezza = 1073741720 al 08/05/2019 12:07 s.Lunghezza = 1073741730 al 08/05/2019 12 : 07 s.Length = 1073741740 at 08/05/2019 12:07 s.Length = 1073741750 at 08/05/2019 12:07 s.Length = 1073741760 at 08/05/2019 12:07 s.Lunghezza = 1073741770 at 08/05/2019 12:07 s.Lunghezza = 1073741780 al 08/05/2019 12:07 s.Lunghezza = 1073741790 al 08/05/2019 12:07
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:07. Dopo la decimazione, il valore di Incremento è 1. s.Lunghezza = 1073741791 al 08/05/2019 12:07
È stata generata un'eccezione di tipo "System.OutOfMemoryException". al 08/05/2019 12:07. Dopo la decimazione, il valore di Incremento è 0. Test completato.
La lunghezza massima di una stringa è 1073741791.
Premere un tasto qualsiasi per continuare.
La lunghezza massima di una stringa sulla mia macchina è 1073741791.
Apprezzerei molto se le persone potessero pubblicare i loro risultati come un commento qui sotto.
Sarà interessante sapere se le persone ottengono risultati uguali o diversi.