Panjang maksimal string di mesin saya adalah 1.073.741.791 .
Anda lihat, String tidak dibatasi oleh integer seperti yang umum diyakini.
Selain pembatasan memori, Strings tidak boleh memiliki lebih dari 2 30 ( 1.073.741.824 ) karakter, karena batas 2GB diberlakukan oleh Microsoft CLR (Common Language Runtime). 33 lebih dari yang diizinkan komputer saya.
Sekarang, inilah sesuatu yang dapat Anda coba sendiri.
Buat aplikasi konsol C # baru di Visual Studio dan kemudian salin / tempel metode utama di sini:
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();
}
Hasil saya adalah sebagai berikut:
Tes string, oleh Nicholas John Joseph Taylor
Secara teoritis, C # harus mendukung string int.MaxValue, tetapi kami kehabisan memori sebelum itu.
Ini adalah tes cepat untuk mempersempit hasil untuk menemukan panjang string yang didukung maksimal.
Tes dimulai ... sekarang:
s.Length = 1000000000 pada 08/05/2019 12:06
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:06. Setelah penghancuran, nilai Peningkatan adalah 100000000.
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:06. Setelah penipisan, nilai Penambahan adalah 10000000. s.Panjang = 1010000000 pada 08/05/2019 12:06 s.Panjang = 1020000000 pada 08/05/2019 12:06 s. Panjang = 1030000000 pada 08/05/2019 12 : 06 s.Panjang = 1040000000 pada 08/05/2019 12:06 s.Panjang = 1050000000 pada 08/05/2019 12:06 s.Panjang = 1060000000 pada 08/05/2019 12:06 s.Panjang = 1070000000 di 08/05/2019 12:06
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:06. Setelah penipisan, nilai Penambahan adalah 1000000. d. Panjang = 1071000000 pada 08/05/2019 12:06 d. Panjang = 1072000000 pada 08/05/2019 12:06 d. Panjang = 1073000000 pada 08/05/2019 12 : 06
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:06. Setelah penipisan, nilai Penambahan adalah 100000. d. Panjang = 1073100000 pada 08/05/2019 12:06 d. Panjang = 1073200000 pada 08/05/2019 12:06 d. Panjang = 1073300000 pada 08/05/2019 12 : 06 s.Panjang = 1073400000 pada 08/05/2019 12:06 s.Panjang = 1073500000 pada 08/05/2019 12:06 s.Panjang = 1073600000 pada 08/05/2019 12:06 s.Panjang = 1073700000 di 08/05/2019 12:06
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:06. Setelah penipisan, nilai Penambahan adalah 10000. s.Panjang = 1073710000 pada 08/05/2019 12:06 s.Panjang = 1073720000 pada 08/05/2019 12:06 s. Panjang = 1073730000 pada 08/05/2019 12 : 06 s.Panjang = 1073740000 pada 08/05/2019 12:06
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:06. Setelah decimation, nilai Increment adalah 1000. s.Length = 1073741000 pada 08/05/2019 12:06
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:06. Setelah penipisan, nilai Increment adalah 100. s.Length = 1073741100 pada 08/05/2019 12:06 s.Length = 1073741200 pada 08/05/2019 12:06 s.Length = 1073741300 pada 08/05/2019 12 : 07 d.Panjang = 1073741400 pada 08/05/2019 12:07 d.Panjang = 1073741500 pada 08/05/2019 12:07 d.Panjang = 1073741600 pada 08/05/2019 12:07 d.Panjang = 1073741700 pada 08/05/2019 12:07
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:07. Setelah penipisan, nilai Penambahan adalah 10. d. Panjang = 1073741710 pada 08/05/2019 12:07 d. Panjang = 1073741720 pada 08/05/2019 12:07 d. Panjang = 1073741730 pada 08/05/2019 12 : 07 d.Panjang = 1073741740 pada 08/05/2019 12:07 d.Panjang = 1073741750 pada 08/05/2019 12:07 d.Panjang = 1073741760 pada 08/05/2019 12:07 d.Panjang = 1073741770 pada 08/05/2019 12:07 s.Length = 1073741780 pada 08/05/2019 12:07 s.Length = 1073741790 pada 08/05/2019 12:07
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:07. Setelah decimation, nilai Increment adalah 1. s.Length = 1073741791 pada 08/05/2019 12:07
Pengecualian jenis 'System.OutOfMemoryException' dilemparkan. pada 08/05/2019 12:07. Setelah decimation, nilai Increment adalah 0. Tes selesai.
Panjang maksimal string adalah 1073741791.
Tekan tombol apa saja untuk melanjutkan.
Panjang maksimal string pada mesin saya adalah 1073741791.
Saya akan sangat menghargai jika orang dapat memposting hasil mereka sebagai komentar di bawah ini.
Akan menarik untuk dipelajari jika orang mendapatkan hasil yang sama atau berbeda.