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