我测试了i.ToString()
,i + ""
,Console.WriteLine(i+"")
和Console.WriteLine(i)
的速度。 (i
是int
)
结果如下:
i.ToString()
(149毫秒)比i + ""
(202毫秒)快。
但是当我使用Console.WriteLine
Console.WriteLine(i + "")
(743毫秒)时,比Console.WriteLine(i)
(927毫秒,根据TextWriter source Console快得多。WriteLine调用{{1} }内部)。
现在我的问题是:为什么ToString()
与i + ""
结合使用更快?
答案 0 :(得分:2)
当我查看源代码时,我看到了:
i + ""
= String.Concat(object)
,它调用obj.ToString()
还有一个String.Concat(object)
。这样比较慢。
第一种方法)使用Console.WriteLine很简单:
public static void WriteLine(String value)
{
Out.WriteLine(value);
}
https://referencesource.microsoft.com/#mscorlib/system/console.cs,5ac7c4fda643413b
内部,它将创建一个带有值+'\ r \ n'的缓冲区,并仅调用一次.Write(char[], int, int)
。
第二种方式)用int调用时,它是不同的。
public virtual void WriteLine(int value) {
Write(value);
WriteLine();
}
https://referencesource.microsoft.com/#mscorlib/system/console.cs,82d5745bf4a5ecc6
这样,它将两次调用Write(char[], int, int)
。可能是这种放缓,但我不能确定。这只是提示,可能是问题所在。
编辑:
第二种方法,它调用int.ToString(IFormatProvider)
来获取数字的字符串表示形式,这是另一种开销,它会使速度变慢一点,因为它每次都可以获取该提供程序的实例。
https://referencesource.microsoft.com/#mscorlib/system/globalization/numberformatinfo.cs,9c4284b5db21c23a