一尘不染

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

c#

我想知道 特定于.Net framework
的字符串实习的过程和内部。还想知道使用实习的好处,以及应该使用字符串实习来提高性能的方案/情况。尽管我已经研究了杰弗里·里希特(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;
}

阅读 205

收藏
2020-05-19

共1个答案

一尘不染

实习是 内部实施细节与拳击不同 ,我认为 了解 比您在里希特的书中读到的更多的 知识 没有任何好处。

手动设置字符串的微优化好处 很小, 因此通常不建议这样做。

这可能描述了它:

class Program
{
    const string SomeString = "Some String"; // gets interned

    static void Main(string[] args)
    {
        var s1 = SomeString; // use interned string
        var s2 = SomeString; // use interned string
        var s = "String";
        var s3 = "Some " + s; // no interning

        Console.WriteLine(s1 == s2); // uses interning comparison
        Console.WriteLine(s1 == s3); // do NOT use interning comparison
    }
}
2020-05-19