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

Which of one from string interpolation and string.format is better in performance?

考虑这段代码:

var url = "www.example.com";

String.Format:

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

字符串插值:

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

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

还有什么是最适合使用它们的场景?

Which of one from string interpolation and string.format is better in performance?

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

Also what are the best fit scenarios for use of them?

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

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

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

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

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