【发布时间】:2018-02-20 04:01:38
【问题描述】:
在字符串上使用常量是否有任何明显的好处。假设以下情况
public void MethodUsingConstant()
{
const string searchedText = "foo";
//some operations using searchedText string
}
public void MethodNoUsingConstant()
{
string searchedText = "foo";
//some operations using searchedText string
}
还有一个选项可以把它带到一个类结构常量字段中。
或者,我应该避免过多地考虑这些微优化吗?
【问题讨论】:
-
仅在您有可证明、可衡量的性能问题时进行优化。即便如此,也要找到性能瓶颈并仅对其进行优化。
-
如果有的话,这将是一个非常极端的“优化”——两个字符串都将被保留,并且无论如何您将在运行时获得相同的引用。如果您使用优化编译两个示例并查看 IL,它们是相同的。
-
在程序正确性方面存在差异。通过声明为常量,您的意图很明确:这是一个静态值,而不是可以在代码中途设置为不同值的变量。
-
@Scott:“仍然可以更改字符串的值”——不受标准、安全的 C# 代码的限制。
string类型是不可变的。要更改string实例的值,需要通过反射或其他恶意手段故意绕过语言语义。 -
有一个优化永远不会为时过早:优化可读性。如果一个变量打算是不可变的,则通过将其设为
const来传达该意图。 @hatchet:无论哪种方式,该程序都是正确的。在程序正确性方面完全没有区别。
标签: c# .net string performance clr