Die maximale Länge einer Zeichenfolge auf meinem Computer beträgt 1.073.741.791 .
Sie sehen, Strings sind nicht durch Ganzzahlen begrenzt, wie allgemein angenommen wird.
Abgesehen von Speicherbeschränkungen können Strings nicht mehr als 2 30 ( 1.073.741.824) haben ) Zeichen enthalten, da die Microsoft CLR (Common Language Runtime) eine Beschränkung von 2 GB . 33 mehr als mein Computer erlaubt.
Hier ist etwas, das Sie gerne selbst ausprobieren können.
Erstellen Sie eine neue C # -Konsolen-App in Visual Studio und kopieren Sie die Hauptmethode hier / fügen Sie sie ein:
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();
}
Meine Ergebnisse waren wie folgt:
Stringtest von Nicholas John Joseph Taylor
Theoretisch sollte C # eine Zeichenfolge von int.MaxValue unterstützen, aber vorher geht uns der Speicher aus.
Dies ist ein schneller Test, um die Ergebnisse einzugrenzen und die maximal unterstützte Länge einer Zeichenfolge zu ermitteln.
Der Test beginnt ... jetzt:
s.Length = 1000000000 am 08/05/2019 12:06
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:06. Nach der Dezimierung beträgt der Wert von Increment 100000000.
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:06. Nach der Dezimierung beträgt der Wert für Inkrement 10000000. s.Length = 1010000000 am 08/05/2019 12:06 s.Length = 1020000000 am 08/05/2019 12:06 s.Length = 1030000000 am 08/05/2019 12 : 06 s.Length = 1040000000 am 08/05/2019 12:06 s.Length = 1050000000 am 08/05/2019 12:06 s.Length = 1060000000 am 08/05/2019 12:06 s.Length = 1070000000 at 08/05/2019 12:06
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:06. Nach der Dezimierung beträgt der Wert für Inkrement 1000000. s.Length = 1071000000 am 08/05/2019 12:06 s.Length = 1072000000 am 08/05/2019 12:06 s.Length = 1073000000 am 08/05/2019 12 : 06
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:06. Nach der Dezimierung beträgt der Wert von Inkrement 100000. s.Length = 1073100000 am 08/05/2019 12:06 s.Length = 1073200000 am 08/05/2019 12:06 s.Length = 1073300000 am 08/05/2019 12 : 06 s.Length = 1073400000 am 08/05/2019 12:06 s.Length = 1073500000 am 08/05/2019 12:06 s.Length = 1073600000 am 08/05/2019 12:06 s.Length = 1073700000 at 08/05/2019 12:06
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:06. Nach der Dezimierung beträgt der Wert für Inkrement 10000. s.Length = 1073710000 am 08/05/2019 12:06 s.Length = 1073720000 am 08/05/2019 12:06 s.Length = 1073730000 am 08/05/2019 12 : 06 s.Length = 1073740000 am 08/05/2019 12:06
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:06. Nach der Dezimierung beträgt der Wert von Inkrement 1000. s.Length = 1073741000 am 08/05/2019 12:06
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:06. Nach der Dezimierung beträgt der Wert für Inkrement 100. s.Length = 1073741100 am 08/05/2019 12:06 s.Length = 1073741200 am 08/05/2019 12:06 s.Length = 1073741300 am 08/05/2019 12 : 07 s.Length = 1073741400 am 08/05/2019 12:07 s.Length = 1073741500 am 08/05/2019 12:07 s.Length = 1073741600 am 08/05/2019 12:07 s.Length = 1073741700 at 08/05/2019 12:07
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:07. Nach der Dezimierung beträgt der Wert für Inkrement 10. s.Length = 1073741710 am 08/05/2019 12:07 s.Length = 1073741720 am 08/05/2019 12:07 s.Length = 1073741730 am 08/05/2019 12 : 07 s.Length = 1073741740 am 08/05/2019 12:07 s.Length = 1073741750 am 08/05/2019 12:07 s.Length = 1073741760 am 08/05/2019 12:07 s.Length = 1073741770 at 08/05/2019 12:07 s.Length = 1073741780 um 08/05/2019 12:07 s.Length = 1073741790 um 08/05/2019 12:07
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:07. Nach der Dezimierung beträgt der Wert von Inkrement 1. s.Length = 1073741791 am 08/05/2019 12:07
Eine Fehlermeldung des Typs 'SystemOutOfMemoryException' wurde angezeigt. am 08/05/2019 12:07. Nach der Dezimierung ist der Wert von Inkrement 0. Test abgeschlossen.
Die maximale Länge einer Zeichenfolge beträgt 1073741791.
Drücken Sie eine beliebige Taste, um fortzufahren.
Die maximale Länge eines Strings auf meinem Computer beträgt 1073741791.
Ich würde mich sehr freuen, wenn die Leute ihre Ergebnisse als Kommentar unten posten könnten.
Es wird interessant sein zu erfahren, ob Menschen die gleichen oder unterschiedliche Ergebnisse erzielen.