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

标签 c# .net

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

相关文章:

c# - 文件上传控件和 Ajax AsyncFileUpload 控件

c# - 无法弄清楚为什么 MVC View 没有将值传递给 Firefox 浏览器中的操作

c# - 使用 Google Drive V3 API 和服务帐户身份验证,WebViewLink 为空

c# - 将 Object.GetHashCode() 转换为 Guid

c# - 如何使用 .NET Core 绘图?

C# Cosmos DB 补丁 - 将元素插入子集合

c# - 接口(interface)引用

c# - 方法重载和多态性

.net - 如何在 VB .Net 中为 Windows Phone 7 调用电话?

c# - Newtonsoft JSON- 与 DataSet 之间的转换会导致 Decimal 变为 Double?