为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Console.WriteLine(i + “”)

为什么 Console.WriteLine(i + “”)

C#
呼唤远方 2022-08-20 17:22:06
我测试了 、 和 的速度。( 曾是一个 )结果如下:i.ToString()i + ""Console.WriteLine(i+"")Console.WriteLine(i)iinti.ToString()(149 毫秒)比 (202 毫秒) 快。i + ""但是当我使用时(743毫秒)比(927毫秒,根据TextWriter源Consolor.WriteLine内部调用)快得多。Console.WriteLineConsole.WriteLine(i + "")Console.WriteLine(i)ToString()现在我的问题是:为什么与?i + ""Console.WriteLine()笔记:我对非控制台内容使用了 1,000,000 次迭代,为控制台测试使用了 1,000 次迭代。我使用 .NET Framework 4.7.1该代码是使用 Visual Studio 2017(版本 15.9.4)中的调试配置编译的。“发布”给出了类似的结果。项目类型为控制台应用程序。代码可作为 GitHub Gist 提供
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

当我查看源代码时,我看到了这个:


i + "" = String.Concat(object)哪个叫声 还有一个.所以它更慢。obj.ToString()String.Concat(object)


1st way) 使用 Console.WriteLine,它很简单:


    public static void WriteLine(String value)

    {

        Out.WriteLine(value);

    }

https://referencesource.microsoft.com/#mscorlib/system/console.cs,5ac7c4fda643413b


在内部,它创建 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)


编辑:


此外,第二种方式,它调用以获取数字的字符串表示形式,这是另一个开销,可以稍微减慢它的速度,因为它每次都可以获取该提供程序的实例。https://referencesource.microsoft.com/#mscorlib/system/globalization/numberformatinfo.cs,9c4284b5db21c23aint.ToString(IFormatProvider)


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 265 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号