C#6.0"string"和$"string"之间的性能差异

Jon*_*zzi -2 c# syntactic-sugar string-interpolation c#-6.0

我在C#6.0中有2个代码:

样本1:

var foo = "Some text, " +
          $"some other {bar}, " +
          "end text.";
Run Code Online (Sandbox Code Playgroud)

样本2:

var foo = $"Some text, " +
          $"some other {bar}, " +
          $"end text.";
Run Code Online (Sandbox Code Playgroud)

显然两个代码都会产生相同的结果,但第二个代码在美学上更加美观(这是我的意见,请记住每个代码都有你的).

问题:
如果不需要$,是否有问题(性能或其他)写一个前缀为$的字符串.

编辑: 回答一些投诉:

第二个是可怕的.不要对未插值的字符串使用字符串插值符号($).任何看过代码的人(或未来,更有经验的人)都会感到困惑

这完全是您的看法,我在这里有一个团队,有10位高级C#开发人员,都同意第二个更清晰.

@ChetanRanpariya这不是真的.插值字符串是用于调用string.Format的语法糖,必须调用它(从而影响性能).

你需要提供证明你在说什么.

u8i*_*8it 5

所述$创建的内插串这是与使用String.Format.如果使用+字符串文字,则编译器会优化代码以避免连接在一起.使用插值字符串可能会阻止此优化.

编辑


性能和文字优化测试

好吧,我刚刚对此进行了测试,似乎没有任何性能问题.显然编译器会忽略$并且不使用String.Format(如果不{}存在).我的测试结果如下所示,有600万个构造50长度字符串的循环.

  • String.Format:23700毫秒
  • $"a{null}"+:22650毫秒
  • $"a"+:13毫秒
  • "a"+:13毫秒
  • "a"连接+:700毫秒

而且,看IL也没有区别.因此,性能方面,您发布的代码执行和优化相同,$被忽略,只是使用时的一个因素{}.

句法

当然,关于这是否是良好的语法可能存在争议.我可以想到支持和反对的论据.

优点

  • 如果$已经存在,则添加新参数会更容易
  • 在多行文字的行之间移动参数更容易
  • 它提供了多行文字行之间的一致性

缺点

  • 它看起来不同......最不惊讶的原则.
  • 为什么要添加未使用的语法?
  • 它不会使插入的变量明显

对我来说,倾斜点是我看到$并希望看到一个{}和一个论点.如果我看不到我期望看到的东西,它会导致认知失调.另一方面,我可以想象它提供的流动性可能会出现这种情况.可能很远,它取决于开发组和目标.