哪个更有效:在代码中硬编码字符串——或者——重用字符串引用
本文关键字:字符串 编码字符 或者 引用 编码 有效 代码 | 更新日期: 2023-09-27 18:02:18
想知道下面哪个选项更有效。有什么建议吗?
清单1string 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中被实习,所以从性能的角度来看,这两种方式都是完全相同的——也就是说,不要做第二个,因为维护它的人会杀了你。