给定以下简单的 .NET 代码,在字符串 "xml"
方面,这两者之间是否有任何区别?
if (extension.Equals("xml", StringComparison.OrdinalIgnoreCase))
{
return FileType.Xml;
}
对比
const string xmlText = "xml";
if (extension.Equals(xmlText, StringComparison.OrdinalIgnoreCase))
{
return FileType.Xml;
}
请注意,“xml”
这个词再也不会在类里面使用了。它实际上就在那个地方。
我的印象是,较新版本的 .NET 编译器会将这样的简单字符串转换为 const(在后台)。
更棒的是,如果在另一个地方使用了 another "xml"
字符串,编译器只会创建 one const并且这两个引用都将引用该单个字符串引用/内存分配。
那么 - 在性能方面有什么不同吗?
免责声明:请不要进行“微优化”评论。 我明白了。这实际上是关于理解事物而不是尝试微优化一行代码。
最佳答案
编译器也是一样。基本上这两个变量都无法在运行时更改。
这是一个例子:
public static void Main()
{
Console.WriteLine("Hello World");
const string hello = "Hello World";
Console.WriteLine(hello);
}
编译为:
.method public hidebysig static void Main() cil managed
{
//
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Hello World"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ldstr "Hello World"
IL_0011: call void [mscorlib]System.Console::WriteLine(string)
IL_0016: nop
IL_0017: ret
}
如您所见,它们完全相同。编译器使用 ldstr
为文字字符串推送一个字符串对象。
您可以将 const string
移到方法之外,这不会有什么不同,因为文字被视为 const。
关于c# - 将此 .NET 字符串更改为 const 是否会提高性能? IL 会自动执行此操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53483181/