Bla*_*rig 15 c# language-features
你可以传递给string.Format()方法多少个参数?
必须有某种理论或强制限制.它是基于params []类型的限制还是正在使用它或完全不同的应用程序的内存使用情况?
Mar*_*ell 19
据我所知...
好吧,理论上的限制是数组的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);
Run Code Online (Sandbox Code Playgroud)
Joh*_*ren 19
好吧,我从隐藏中出现...我使用以下程序来验证发生了什么,而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();
Run Code Online (Sandbox Code Playgroud)
喜欢讨论的人!