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

标签 boxing c#-6.0 string-interpolation

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

最佳答案

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

现在,调用 string.Format() 会分配相当多的空间,而不仅仅是由于装箱(例如,string.Format("{0:s} - {1: B}:值为:{2:C2}", DateTime.UtcNow, Guid.NewGuid(), 3.50m) 进行了 13 次分配,其中只有 3 次是由于装箱所致),但 there is talk about improving that in the future .

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

关于boxing - C# 6 字符串插值是否像 string.Format() 那样对其参数使用装箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133739/

相关文章:

c# - 代码分析警告 CA2213 - 在 IDisposable 支持字段上调用 ​​Dispose()

visual-studio-2015 - 关于 C# 6.0 中 "using static"的重大更改,我如何处理在 VS 2013 和 VS2015 中正在编辑的 C# 代码库?

javascript - 获取字符串中的字符索引以进行插值

postgresql - 事务中的游标在go和psql之间的行为不同

c# - Nullable<T> 与类似的自定义 C# 结构有何不同?

c# - BCL隐藏拳击?

.net - C++/命令行界面 : Boxing and Generic Lists

java - 在 Java 中用原语规避代码膨胀的模式

c# - 编译器如何优化 C# 中的异常过滤器?

java - 消息格式的更好替代方案