在。net中可以创建的最长字符串是什么?据我所知,String类的文档对这个问题保持沉默,所以权威的答案可能需要一些内部知识。64位系统的最大变化是多少?
[这个问题更多的是出于好奇而不是实际用途——我不打算创建任何使用巨大字符串的代码!]
在。net中可以创建的最长字符串是什么?据我所知,String类的文档对这个问题保持沉默,所以权威的答案可能需要一些内部知识。64位系统的最大变化是多少?
[这个问题更多的是出于好奇而不是实际用途——我不打算创建任何使用巨大字符串的代码!]
当前回答
200 mb……这时,你的应用程序会陷入虚拟停顿,只有大约gig的工作集内存,o/s开始表现得好像你需要重新启动。
static void Main(string[] args)
{
string s = "hello world";
for(;;)
{
s = s + s.Substring(0, s.Length/10);
Console.WriteLine(s.Length);
}
}
12
13
14
15
16
17
18
...
158905664
174796230
192275853
211503438
其他回答
因为字符串。Length是一个整数(这是Int32的别名),其大小限制为Int32。MaxValue unicode字符。: -)
由于系统的长度属性。字符串是Int32,我猜最大长度将是2147,483,647个字符(最大Int32大小)。如果它允许更长的时间,你就不能检查长度,因为那会失败。
200 mb……这时,你的应用程序会陷入虚拟停顿,只有大约gig的工作集内存,o/s开始表现得好像你需要重新启动。
static void Main(string[] args)
{
string s = "hello world";
for(;;)
{
s = s + s.Substring(0, s.Length/10);
Console.WriteLine(s.Length);
}
}
12
13
14
15
16
17
18
...
158905664
174796230
192275853
211503438
String在RAM的堆中分配动态内存大小。但是字符串地址存储在堆栈中,占用4个字节的内存。
根据我高度科学和精确的实验,它在我的机器上达到了10亿个字符。(我仍在运行下面的代码以获得更好的精确位置)。
更新: 几个小时后,我放弃了。最终结果:能够在系统中创造出超过1亿个字符的内容。OutOfMemoryException在1,000,000,000个字符。
using System;
using System.Collections.Generic;
public class MyClass
{
public static void Main()
{
int i = 100000000;
try
{
for (i = i; i <= int.MaxValue; i += 5000)
{
string value = new string('x', i);
//WL(i);
}
}
catch (Exception exc)
{
WL(i);
WL(exc);
}
WL(i);
RL();
}
#region Helper methods
private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
#endregion
}