我想知道 特定于.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; }
实习是 内部实施细节 。 与拳击不同 ,我认为 了解 比您在里希特的书中读到的更多的 知识 没有任何好处。
手动设置字符串的微优化好处 很小, 因此通常不建议这样做。
这可能描述了它:
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 } }