【问题标题】:Which of one from string interpolation and string.format is better in performance?字符串插值和 string.format 中哪一个在性能上更好?
【发布时间】:2016-06-23 07:33:47
【问题描述】:

考虑这段代码:

var url = "www.example.com";

String.Format:

var targetUrl = string.Format("URL: {0}", url);

字符串插值:

var targetUrl=$"URL: {url}";

字符串插值和string.Format哪个性能更好?

还有哪些最适合使用它们的场景?

【问题讨论】:

  • 您是否遇到过这种情况,上面的线路很慢?
  • 在我的代码和this link中,我发现字符串插值比 string.format 稍慢。
  • 链接的帖子显示了string.Format 和字符串插值的几乎相同的结果(这是真的)。这看起来像是过早的优化问题。

标签: c# string-formatting c#-6.0 string-interpolation


【解决方案1】:

字符串插值和string.format哪个性能更好?

它们都不是更好,因为它们在运行时是相等的。编译器将字符串插值重写为string.Format,因此两个语句在运行时完全相同

还有哪些最适合使用它们的场景?

如果您在范围内有要在字符串格式化中使用的变量,请使用字符串插值。字符串插值更安全,因为它对字符串的有效性进行了编译时检查。如果您从外部源(如资源文件或数据库)加载文本,请使用 string.Format

【讨论】:

    【解决方案2】:

    在大多数情况下,它们是相同的,但如果您在接受格式字符串的日志记录语句中使用它们,则不然。 (例如:log.Debug("URL: {0}", url)

    如果您使用 {0} 格式,则在日志框架决定是否发出此消息之前,参数不会转换为字符串,而 {myVar} 格式会在输入函数之前转换为字符串.

    因此,在您仅输出 Info 及更高版本的 log.Debug() 调用中,{myVar} 格式始终支付二进制文本税,而 {0} 格式仅在您真正需要时支付税款。

    在传递字符串的情况下,这无关紧要,但是对于二进制数据和浮点数据,它可以产生很大的不同。

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2014-11-28
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多