.NET字符串的最大可能长度是多少?

时间:2020-03-06 14:47:36  来源:igfitidea点击:

.NET中可以创建的最长字符串是什么?据我所知,String类的文档对此问题保持沉默,因此权威的答案可能需要一些内部知识。在64位系统上最大的变化是否会出现?

[这是出于好奇而不是出于实用目的,我无意创建任何使用巨大字符串的代码!]

解决方案

由于System.String的Length属性是Int32,因此我猜最大长度为2,147,483,647个字符(最大Int32大小)。如果允许更长的时间,我们将无法检查"长度",因为那样会失败。

由于String.Length是整数(是Int32的别名),因此其大小限制为Int32.MaxValue Unicode字符。 ;-)

根据我高度科学和准确的实验,它在我的计算机上达到了十亿个字符之前的最高水平。 (我仍在运行下面的代码,以获得更好的定位)。

更新:
几个小时后,我放弃了。最终结果:可以大于100,000,000个字符,并立即以1,000,000,000个字符给出" System.OutOfMemoryException"。

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
}

理论极限可能是2,147,483,647,但实际极限还远远没有达到这个极限。由于.NET程序中的任何单个对象都不能超过2 GB,并且字符串类型使用unicode(每个字符两个字节),因此我们最好能做到1,073,741,823,但是我们不可能在一台32位计算机。

这就是其中的一种情况:""如果要问,我们可能做错了事。"]。

200兆...在这时,应用程序会陷入虚拟停顿,大约有演出工作集内存,并且操作系统开始表现为我们需要重新启动。

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