C# 6 字符串插值是否像 string.Format() 那样为其参数使用装箱?

Does C# 6 string interpolation use boxing like string.Format() does for its arguments?

我问这个是为了性能 - 使用大量的装箱会产生大量的堆分配,这会带来更多的 GC 收集,这有时会导致应用程序冻结,让用户恼火。

所有字符串插值(至少在常见情况下)是调用 string.Format().

现在,调用 string.Format() 分配了很多,而不仅仅是由于装箱(例如,string.Format("{0:s} - {1:B}: The value is: {2:C2}", DateTime.UtcNow, Guid.NewGuid(), 3.50m) 进行了 13 次分配,其中只有 3 次是由于装箱),尽管 there is talk about improving that in the future.

尽管与往常一样,在性能方面,您通常不应该只是盲目地到处编写不可读的代码,因为可读版本存在已知的性能问题。相反,将不可读的高效代码限制在实际需要它的代码部分。