想知道以下哪个选项效率更高。有什么建议吗?
清单1
string header = "Header 1"; // create a string variable and reuse
client.AddMessage(header, ...);
client.AddMessage(header, ...);
client.AddMessage(header, ...);
client.AddMessage(header, ...);
client.AddMessage(header, ...);
...
清单2
client.AddMessage("Header 1", ...); // hard code the string in each call
client.AddMessage("Header 1", ...);
client.AddMessage("Header 1", ...);
client.AddMessage("Header 1", ...);
client.AddMessage("Header 1", ...);
....
答案 0 :(得分:6)
您可能不应该关心这种(可能)微优化:重要的是,这里是可维护性:
(编译器应该为你优化,无论如何,我想)
答案 1 :(得分:3)
答案 2 :(得分:3)
我怀疑其中有多少,但清单1我会说,因为清单2中的所有单个字符串都必须依次创建,除非优化器在幕后做事。
我已经使用了版本1但是如果值不改变则使用const。
const string HEADER = "Header 1";
答案 3 :(得分:0)
将重复使用字符串(interned)。所以他们应该同样有效率。我认为清单1更易于维护。
答案 4 :(得分:0)
两者都是一样的。字符串被实习。
答案 5 :(得分:0)
我不是100%肯定,但我认为你可以在你的字符串声明中添加const,如果你想要更多的性能,但我认为你不会看到任何可衡量的差异......
但是清单1有一个好处,你只需更改代码的一部分即可更改值...
答案 6 :(得分:0)
第一个选项对于重构更有效率,如果您希望更改代码,则只需更改一行。另外,如果它总是与编译时定义的值相同,您可能需要考虑使用常量。
答案 7 :(得分:0)
如果你真的相信这段代码是一个性能瓶颈,你应该尝试两种方式,配置文件,然后你知道哪个更有效。
如果您不够谨慎测量,请不要优化。
如果你只是出于好奇心问,Strings get interned in .NET所以从性能角度来看它是完全一样的 - 也就是说不要做第二个因为那么那个必须维护它的人会杀了你。< / p>