gpt4 book ai didi

c# - 创建串联字符串的性能

转载 作者:太空狗 更新时间:2023-10-29 20:13:54 25 4
gpt4 key购买 nike

C# 中,哪种创建字符串的运行时效率更高

1 号:

bool value = true;
int channel = 1;
String s = String.Format(":Channel{0}:Display {1}", channel, value ? "ON" : "OFF");

2 号:

bool value = true;
String channel = "1";
string s = ":Channel" + channel + ":Display " + value ? "ON" : "OFF";

最佳答案

我现在要添加一个示例来说明编译器如何处理这两者,因为在其他一些答案中似乎存在很多的混淆(编辑:请注意,这些混淆中的大部分现在已被删除/编辑掉):

bool value = true;
int channel = 1;
String s = String.Format(":Channel{0}:Display {1}", channel,
value ? "ON" : "OFF");

最后一行编译为:

String s = String.Format(":Channel{0}:Display {1}",
new object[2] {(object)channel, value ? "ON" : "OFF")};

有趣的是,为 int channel 创建了一个数组和一个“box”,当然还有查找 {0}/{ 所需的额外解析1}.

现在第二个:

bool value = true;
String channel = "1";
string s = ":Channel" + channel + ":Display " + (value ? "ON" : "OFF");

最后一行编译为:

string s = string.Concat(":Channel", channel, ":Display ", value ? "ON" : "OFF");

这里没有数组,没有框(channel 现在是一个字符串),也没有解析。过载是 public static string string.Concat(string,string,string,string) ; string.Concat 实现非常高效,预先分配一个合适大小的字符串,然后覆盖等。

在大多数代码中,两者都可以。第二个版本在技术上更高效(没有盒子,没有数组,没有解析),但如果你以后想要国际化,这是一个主要的痛苦。在大多数应用程序中,您不会注意到两者之间的任何区别。解析速度很快,并且框/数组作为零代对象廉价收集。但便宜不是免费的。

关于c# - 创建串联字符串的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com