哪个更有效:在代码中硬编码字符串——或者——重用字符串引用

本文关键字:字符串 编码字符 或者 引用 编码 有效 代码 | 更新日期: 2023-09-27 18:02:18

想知道下面哪个选项更有效。有什么建议吗?

清单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", ...);
....

哪个更有效:在代码中硬编码字符串——或者——重用字符串引用

您可能不应该关心这种(可能的)微优化:这里重要的是可维护性:

    是否只有一个字符串?
  • 或者你可以有几个不同的值,一天或另一天?


(编译器应该为您优化,无论如何,我想)

字符串是在。net世界中被嵌入的,所以两者的工作方式是一样的。

换句话说,它对性能没有影响。

至于可维护性——如果你需要更改头名称,选项1更好(DRY)。

我怀疑清单1中有很多内容,但我认为清单2中的所有这些单独的字符串都必须依次创建,除非优化器在幕后做了一些事情。

我得到了版本1,但使用const代替,如果值不改变。

const string HEADER  = "Header 1";

字符串将被重用(被拘禁)。所以它们的效率应该是相等的。我认为清单1更易于维护。

两者是一样的。

我不是100%确定,但我认为这是同样的事情,你可以添加const到你的字符串声明,如果你想要更多的性能,但我不认为你将能够看到任何可测量的差异…

但是清单1有一个好处,您可以通过更改一部分代码来更改值…

对于重构而言,第一个选项更有效,如果您希望更改代码,则只需更改一行。此外,如果它总是在编译时定义相同的值,您可能需要考虑使用常量。

如果你真的认为这段代码是性能瓶颈,你应该两种方法都试一试,然后你就会知道哪个更有效。

如果你不太在意测量,就不要优化

如果你只是出于好奇而问,字符串在。net中被实习,所以从性能的角度来看,这两种方式都是完全相同的——也就是说,不要做第二个,因为维护它的人会杀了你。