Độ dài tối đa của một chuỗi trên máy của tôi là 1.073.741.791 .
Bạn thấy đấy, Chuỗi không bị giới hạn bởi số nguyên như thường được tin.
Bỏ qua các hạn chế về bộ nhớ, Chuỗi không thể có nhiều hơn 2 30 ( 1.073.741.824 ) ký tự, do giới hạn 2GB được áp dụng bởi Microsoft CLR (Thời gian chạy ngôn ngữ chung). Hơn 33 máy tính của tôi cho phép.
Bây giờ, đây là một cái gì đó bạn có thể tự mình thử.
Tạo một ứng dụng bảng điều khiển C # mới trong Visual Studio và sau đó sao chép / dán phương thức chính tại đây:
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();
}
Kết quả của tôi như sau:
Kiểm tra chuỗi, bởi Nicholas John Joseph Taylor
Về mặt lý thuyết, C # nên hỗ trợ một chuỗi int.MaxValue, nhưng trước đó chúng tôi đã hết bộ nhớ.
Đây là một thử nghiệm nhanh để thu hẹp kết quả để tìm độ dài tối đa được hỗ trợ của chuỗi.
Bài kiểm tra bắt đầu ... ngay bây giờ:
s.Lipse = 1000000000 lúc 08/05/2019 12:06
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:06. Sau khi giảm, giá trị của Tăng là 100000000.
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:06. Sau khi giảm giá trị, giá trị của Tăng là 10000000. s.Lipse = 1010000000 vào ngày 08/05/2019 12:06 s. Chiều dài = 1020000000 lúc 08/05/2019 12:06 s.Lipse = 1030000000 lúc 08/05/2019 12 : 06 s. Chiều dài = 1040000000 lúc 08/05/2019 12:06 s. Chiều dài = 1050000000 lúc 08/05/2019 12:06 s. Chiều dài = 1060000000 lúc 08/05/2019 12:06 s.Lạng = 1070000000 tại 08/05/2019 12:06
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:06. Sau khi giảm giá trị, giá trị của Tăng là 1000000. s.Lipse = 1071000000 lúc 08/05/2019 12:06 s.Lipse = 1072000000 lúc 08/05/2019 12:06 s.Lipse = 1073000000 lúc 08/05/2019 12 : 06
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:06. Sau khi giảm giá trị, giá trị của Tăng là 100000. s.Lipse = 1073100000 lúc 08/05/2019 12:06 s.Lipse = 1073200000 lúc 08/05/2019 12:06 s.Lipse = 1073300000 lúc 08/05/2019 12 : 06 s.Lpm = 1073400000 lúc 08/05/2019 12:06 s.Lipse = 1073500000 lúc 08/05/2019 12:06 s.Lipse = 1073600000 lúc 08/05/2019 12:06 s.Lipse = 1073700000 tại 08/05/2019 12:06
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:06. Sau khi giảm giá trị, giá trị của Tăng là 10000. s. Chiều dài = 1073710000 lúc 08/05/2019 12:06 s. Chiều dài = 1073720000 lúc 08/05/2019 12:06 s. Chiều dài = 1073730000 lúc 08/05/2019 12 : 06 s. Chiều dài = 1073740000 lúc 08/05/2019 12:06
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:06. Sau khi giảm giá trị, giá trị của Tăng là 1000. s.Lipse = 1073741000 vào ngày 08/05/2019 12:06
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:06. Sau khi giảm giá trị, giá trị của Tăng là 100. s.Lipse = 1073741100 lúc 08/05/2019 12:06 s. : 07 s. Chiều dài = 1073741400 lúc 08/05/2019 12:07 s. Chiều dài = 1073741500 lúc 08/05/2019 12:07 s. 08/05/2019 12:07
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:07. Sau khi giảm giá trị, giá trị của Tăng là 10. s.Lipse = 1073741710 lúc 08/05/2019 12:07 s. : 07 s. Chiều dài = 1073741740 lúc 08/05/2019 12:07 s. Chiều dài = 1073741750 lúc 08/05/2019 12:07 s. 08/05/2019 12:07 s. Chiều dài = 1073741780 lúc 08/05/2019 12:07 s. Chiều dài = 1073741790 lúc 08/05/2019 12:07
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:07. Sau khi giảm giá trị, giá trị của Tăng là 1. s.Lipse = 1073741791 lúc 08/05/2019 12:07
Ngoại lệ của loại 'System.OutOfMemoryException' đã được ném. lúc 08/05/2019 12:07. Sau khi giảm, giá trị của Tăng là 0. Kiểm tra hoàn tất.
Độ dài tối đa của một chuỗi là 1073741791.
Bấm phím bất kỳ để tiếp tục.
Độ dài tối đa của một chuỗi trên máy của tôi là 1073741791.
Tôi đánh giá cao nó rất nhiều nếu mọi người có thể đăng kết quả của họ như một bình luận bên dưới.
Sẽ rất thú vị khi tìm hiểu nếu mọi người nhận được kết quả giống nhau hoặc khác nhau.