C#6字符串插值是否像string.Format()那样使用拳击?

时间:2016-10-19 14:08:00

标签: boxing c#-6.0 string-interpolation

我要求这是为了性能 - 使用大量的拳击会产生大量的堆分配,这会带来更多的GC收集,这有时会导致应用程序冻结以瞥见使用户烦恼。

1 个答案:

答案 0 :(得分:6)

所有字符串插值(至少在通常情况下)都是调用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

虽然在性能方面和往常一样,但通常不应盲目地在任何地方盲目地编写不可读代码,因为可读版本已知性能问题。相反,将不可读的高效代码限制为实际需要它的代码部分。