McK*_*eG1 227 .net string limits
什么是可以在.NET中创建的最长字符串?String就我所见,该课程的文档对此问题保持沉默,因此权威性答案可能需要一些内部知识.64位系统的最大变化是什么?
[这更多是为了好奇而不是实际使用 - 我不打算创建任何使用巨大字符串的代码!]
Hit*_*can 328
理论极限可能是2,147,483,647,但实际限制远不及那个.由于.Net程序中没有单个对象可能超过2GB且字符串类型使用unicode(每个字符2个字节),所以你能做的最好是1,073,741,823,但是你不可能在32位机器.
bdu*_*kes 71
基于我高度科学和准确的实验,它在我的机器上达到了1,000,000,000个字符之前.(我仍在运行下面的代码以获得更好的精确定位).
更新:
几个小时后,我放弃了.最终结果:可以超过100,000,000个字符,立即System.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
}
Run Code Online (Sandbox Code Playgroud)
Rya*_*ley 49
由于Length属性System.String为a Int32,我猜测最大长度为2,147,483,647个字符(最大Int32大小).如果允许的时间更长,则无法检查长度,因为这会失败.
use*_*020 28
对于那些迟到这个话题的人来说,我可以看到hitscan的"你可能不应该这样做"可能会让别人问他们应该怎么做......
该StringBuilder的类往往是一个易于更换.如果您的数据来自文件,请考虑其中一个基于流的类.
问题s += "stuff"在于它必须分配一个全新的区域来保存数据,然后将所有旧数据复制到它以及新的东西 - 每个循环和每次循环迭代.因此,增加五个字节到1,000,000 s += "stuff"是非常昂贵的.如果你想要的只是写五个字节到最后并继续你的程序,你必须选择一个留下一些增长空间的类:
StringBuilder sb = new StringBuilder(5000);
for (; ; )
{
sb.Append("stuff");
}
Run Code Online (Sandbox Code Playgroud)
StringBuilder当它受到限制时,它会自动增长一倍.因此,您将在开始时看到增长痛苦,一次是5,000字节,再次是10,000,再次是20,000.追加字符串会在每次循环迭代时产生痛苦.
字符串不受通常认为的整数限制.
除了内存限制,字符串不能超过2 30(1,073,741,824)个字符,因为Microsoft CLR(公共语言运行时)强加了2GB的限制.
希望这可能在未来发生变化.
| 归档时间: |
|
| 查看次数: |
305838 次 |
| 最近记录: |