Bir dize maksimum uzunluk benim makinede ise 1073741791 .
Gördüğünüz gibi, Dizeler yaygın olarak inandığı gibi tamsayı ile sınırlı değildir.
Bellek kısıtlamaları bir yana, Dizeler 2 30'dan fazla olamaz ( 1.073.741.824 Microsoft CLR (Ortak Dil Çalışma Zamanı) tarafından 2 GB sınırlaması getirildiğinden ) karakterden . Bilgisayarımın izin verdiğinden 33 daha fazla.
Şimdi, burada kendinizi deneyebilirsiniz.
Visual Studio'da yeni bir C # konsol uygulaması oluşturun ve ana yöntemi buraya kopyalayın / yapıştırın:
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();
}
Sonuçlarım şöyleydi:
String testi, Nicholas John Joseph Taylor tarafından
Teorik olarak, C # int.MaxValue dizesini desteklemelidir, ancak o zamandan önce bellek tükenir.
Bu, bir dizenin desteklenen maksimum uzunluğunu bulmak için sonuçları daraltmak için hızlı bir testtir.
Test başlar ... şimdi:
Uzunluk = 08.05.2019 12:06
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:06. Decimation sonra, Increment değeri 100000000.
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:06. Decimation sonra, Artış değeri 10000000'dir. S.Length = 1010000000 08/05/2019 12:06 s.Length = 1020000000 08/05/2019 12:06 s.Length = 1030000000 08/05/2019 12 : 06 s. Uzunluk = 1040000000 08/05/2019 12:06 s. Uzunluk = 1050000000 at 08/05/2019 12:06 s. uzunluk = 1060000000 at 08/05/2019 12:06 s. uzunluk: 1070000000 at 08/05/2019 12:06
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:06. Decimation sonra, Artış değeri 1000000. s. Uzunluk = 1071000000 08/05/2019 12:06 s.Length = 1072000000 08/05/2019 12:06 s. Uzunluk = 1073000000 08/05/2019 12 : 06
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:06. Decimation sonra, Artış değeri 100000'dir. S.Length = 1073100000 08/05/2019 12:06 s.Length = 1073200000 08/05/2019 12:06 s.Length = 1073300000 08/05/2019 12 : 06 s. Uzunluk = 1073400000 08/05/2019 12:06 s. Uzunluk = 1073500000 at 08/05/2019 12:06 s. uzunluk = 1073600000 at 08/05/2019 12:06 s. uzunluk: 1073700000 at 08/05/2019 12:06
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:06. Decimation sonra, Artış değeri 10000'dir. S.Length = 1073710000 08/05/2019 12:06 s.Length = 1073720000 08/05/2019 12:06 s.Length = 1073730000 08/05/2019 12 : 06 s Uzunluk = 1073740000 08/05/2019 12:06
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:06. Decimation sonra, Artım değeri 1000'dir. S.Length = 1073741000 08/05/2019 12:06
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:06. Decimation sonra, Artış değeri 100'dür. S.Length = 1073741100 08/05/2019 12:06 s.Length = 1073741200 08/05/2019 12:06 s. Uzunluk = 1073741300 08/05/2019 12 : 07 s. Uzunluk = 1073741400 08/05/2019 12:07 s.Length = 1073741500 at 08/05/2019 12:07 s.Length = 1073741600 at 08/05/2019 12:07 s.Length = 1073741700 at 08/05/2019 12:07
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:07. Decimation sonra, Artış değeri 10'dur. S = Uzunluk = 1073741710 08/05/2019 12:07 s'de. Uzunluk = 1073741720 08/05/2019 12:07 s'de. Uzunluk = 1073741730 08/05/2019 12 : 07 s. Uzunluk = 1073741740 08/05/2019 12:07 s.Length = 1073741750 at 08/05/2019 12:07 s.Length = 1073741760 at 08/05/2019 12:07 s.Length = 1073741770 at 08/05/2019 12:07 s.Length = 1073741780 at 08/05/2019 12:07 s.Length = 1073741790 at 08/05/2019 12:07
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:07. Decimation sonra, Artış değeri 1'dir. S.Length = 1073741791 08/05/2019 12:07
türü 'System.OutOfMemoryException' özel durum. 08/05/2019 12:07. Decimation sonra, Increment değeri 0'dır. Test tamamlandı.
Bir dizenin maksimum uzunluğu 1073741791'dir.
Devam etmek için herhangi bir tuşa basın.
Makinemdeki bir dizenin maksimum uzunluğu 1073741791.
İnsanlar sonuçlarını aşağıdaki yorum olarak gönderebilirlerse çok memnun olurum.
İnsanların aynı veya farklı sonuçları alıp almadığını öğrenmek ilginç olacaktır.