我测试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调用ToString()
内部)。
现在的问题是:为什么i + ""
快与Console.WriteLine()
组合?
当我看了看源代码,我看到了这一点:
i + ""
= String.Concat(object)
哪个呼叫obj.ToString()
还有一个String.Concat(object)
。因此,它是慢。
1路)为Console.WriteLine,它很简单:
public static void WriteLine(String value)
{
Out.WriteLine(value);
}
https://referencesource.microsoft.com/#mscorlib/system/console.cs,5ac7c4fda643413b
Internaly它创建1个缓冲器具有值+“\ 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)
两次。它可以是放缓,但我不能告诉是肯定的。它只是暗示,问题出在哪里都可以。
编辑:
Additionaly 2号路,它调用int.ToString(IFormatProvider)
得到一些字符串表示这里是另一个开销,这会慢下来一点,因为它可以让每一个时间提供程序的实例。 https://referencesource.microsoft.com/#mscorlib/system/globalization/numberformatinfo.cs,9c4284b5db21c23a