gpt4 book ai didi

c# - 将此 .NET 字符串更改为 const 是否会提高性能? IL 会自动执行此操作吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:47:39 26 4
gpt4 key购买 nike

给定以下简单的 .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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com