Was ist die längste Zeichenfolge, die in .NET erstellt werden kann? String
Soweit ich sehen kann, schweigen die Dokumente für die Klasse zu dieser Frage, sodass für eine maßgebliche Antwort möglicherweise einige Kenntnisse der Interna erforderlich sind. Würde sich das Maximum auf einem 64-Bit-System ändern?
[Dies wird eher aus Neugier als aus praktischen Gründen verlangt - ich beabsichtige nicht, Code zu erstellen, der gigantische Zeichenfolgen verwendet!]
byte[]
.Basierend auf meinem hochwissenschaftlichen und genauen Experiment wird es auf meinem Computer weit vor 1.000.000.000 Zeichen übertroffen. (Ich führe immer noch den folgenden Code aus, um einen besseren Punkt zu erhalten).
UPDATE: Nach ein paar Stunden habe ich aufgegeben. Endergebnisse: Kann viel größer als 100.000.000 Zeichen sein, sofort angegeben
System.OutOfMemoryException
bei 1.000.000.000 Zeichen.quelle
Da die
Length
Eigenschaft von einSystem.String
istInt32
, würde ich vermuten, dass die maximale Länge 2.147.483.647 Zeichen (maximaleInt32
Größe) beträgt. Wenn es länger dauern würde, könnten Sie die Länge nicht überprüfen, da dies fehlschlagen würde.quelle
LongLength
und ein Stream verwendetlong
als Länge. Obwohl es eine gültige Antwort ist, ist es keine gute Möglichkeit, dies zu messen.Für jeden, der spät zu diesem Thema kommt, könnte ich sehen, dass Hitscans "Sie sollten das wahrscheinlich nicht tun" jemanden dazu veranlassen könnte, zu fragen, was er tun soll ...
Die StringBuilder- Klasse ist häufig ein einfacher Ersatz. Betrachten Sie eine der Stream-basierten Klassen besonders dann, wenn Ihre Daten aus einer Datei stammen.
Das Problem dabei
s += "stuff"
ist, dass es einen völlig neuen Bereich für die Daten zuweisen und dann alle alten Daten sowie die neuen Daten kopieren muss - JEDE UND JEDE LOOP-ITERATION. Das Hinzufügen von fünf Bytes zu 1.000.000 mits += "stuff"
ist also äußerst kostspielig. Wenn Sie nur fünf Bytes bis zum Ende schreiben und mit Ihrem Programm fortfahren möchten, müssen Sie eine Klasse auswählen, die Raum für Wachstum lässt:StringBuilder
wird automatisch wachsen, indem es sich verdoppelt, wenn das Limit erreicht ist. Sie werden also den Wachstumsschmerz einmal zu Beginn sehen, einmal bei 5.000 Bytes, wieder bei 10.000, wieder bei 20.000. Das Anhängen von Zeichenfolgen verursacht bei jeder Schleifeniteration Schmerzen.quelle
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:
Meine Ergebnisse waren wie folgt:
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.
quelle
200 Megas ... an diesem Punkt kommt Ihre App zum virtuellen Stillstand, hat ungefähr einen Gig-Arbeitsset-Speicher und das Betriebssystem verhält sich so, als müssten Sie neu starten.
quelle
Da
String.Length
es sich um eine Ganzzahl handelt (dh um einen Alias fürInt32
), ist ihre Größe aufInt32.MaxValue
Unicode-Zeichen beschränkt. ;-);quelle