当前位置:  开发笔记 > 编程语言 > 正文

string.Format()参数

如何解决《string.Format()参数》经验,为你挑选了2个好方法。

你可以传递给string.Format()方法多少个参数?

必须有某种理论或强制限制.它是基于params []类型的限制还是正在使用它或完全不同的应用程序的内存使用情况?



1> Marc Gravell..:

据我所知...

好吧,理论上的限制是数组的int32限制,但是你在此之前很久就达到了字符串长度限制,我猜......

只是不要生气它;-p最好将大量小片段写入(例如)文件或响应,而不是一个巨大的打击.

编辑 - 看起来 IL(0xf4240)有一个限制,但显然这并不像它出现的那样; 在我耗尽系统内存之前,我可以让它变得非常大(2 ^ 24)...


更新; 在我看来,边界点是格式字符串...那些{1000001} {1000002}加起来......快速的数学运算(如下)显示我们可以使用的最大有用参数数量是206,449,129:

    long remaining = 2147483647;// max theoretical format arg length
    long count = 10; // i.e. {0}-{9}
    long len = 1;
    int total = 0;
    while (remaining >= 0) {
        for(int i = 0 ; i < count && remaining >= 0; i++) {
            total++;
            remaining -= len + 2; // allow for {}
        }
        count *= 10;
        len++;
    }

    Console.WriteLine(total - 1);



2> John Leidegr..:

好吧,我从隐藏中出现...我使用以下程序来验证发生了什么,而Marc指出像这样的字符串"{0} {1} {2} ... {2147483647}"将成功在参数列表之前的内存限制为2 GiB,我的发现与你的不匹配.因此,你可以放入string.Format方法调用的参数数量的硬限制必须是107713904.

int i = 0;
long sum = 0;
while (sum < int.MaxValue)
{
    var s = sizeof(char) * ("{" + i + "}").Length;
    sum += s; // pseudo append
    ++i;
}
Console.WriteLine(i);
Console.ReadLine();

喜欢讨论的人!

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有