c# - .Net Framework 中的字符串实习 - 有什么好处以及何时使用实习

标签 c# .net string performance string-interning

我想了解特定于 .Net 框架的字符串实习的过程和内部结构。还想知道使用实习的好处以及我们应该使用字符串实习来提高性能的场景/情况。虽然我已经从 Jeffery Richter 的 CLR 书中学习了实习,但我仍然感到困惑,并且想更详细地了解它。

[编辑]使用示例代码提出特定问题,如下所示:

private void MethodA()
{
    string s = "String"; // line 1 - interned literal as explained in the answer        

    //s.intern(); // line 2 - what would happen in line 3 if we uncomment this line, will it make any difference?
}

private bool MethodB(string compareThis)
{
    if (compareThis == "String") // line 3 - will this line use interning (with and without uncommenting line 2 above)?
    {
        return true;
    }
    return false;
}

最佳答案

一般来说,实习是在您使用文字字符串值时自动发生的事情。实习的好处是在内存中只有一份文字副本,无论使用频率如何。

话虽这么说,但很少有理由对运行时生成的自己的字符串进行实习,甚至从未考虑过为正常开发进行字符串实习。

如果您要对可能相同的运行时生成的字符串进行大量比较工作,则可能会有一些好处(因为实习可以通过 ReferenceEquals 加快比较速度)。但是,这是一种高度特化的用法,需要进行大量的分析和测试,除非存在可衡量的问题,否则我不会考虑优化。

关于c# - .Net Framework 中的字符串实习 - 有什么好处以及何时使用实习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8054471/

相关文章:

c# - 为什么单击 tabcontrol 内的 WPF 文本框时 Windows 10 键盘会出现并立即消失?

c# - 在 xna 中使用 Rasterizer Scissoring 时出错

string - Golang中的Scanln不接受空格

.net - F# 引用另一个文件中的模块函数

c# - 为什么 'is' 实现为 'as' ?

java - 如何从 ArrayList 中删除仅包含空白字符的字符串?

javascript - 将字符串格式的数组转换为 JavaScript 数组

c# - 从网址中删除 %20

c# - 在 SQL Server 中批量插入特定列

c# - .NET 引用(未找到方法)