Skip to content

什么是字符串池机制?

🏷️ C# 学习

字符串池机制致力于改善程序的性能。

CLR 会保留程序中出现过的字符串对象的集合,并且在需要新的字符串时,先检查已有的集合,在查找成功时返回已有对象的引用。

字符串池机制可以通过程序集元数据特性进行控制,C# 默认的机制是打开字符串池机制。

csharp
using System;

namespace StringPool
{
    class Program
    {
        static void Main(string args)
        {
            // 两个字符串对象,理论上引用应该不相等
            // 但由于字符串池的机制,两者实际指向同一对象
            string a = "abcde";
            string b = "abcde";
            Console.WriteLine(Object.ReferenceEquals(a, b));    // True

            // 这行代码等同于 c = "abcde"
            // 由于字符串池,c 和 a 还是指向同一对象
            string c = "a" + "b" + "c" + "d" + "e";
            Console.WriteLine(Object.ReferenceEquals(a, c));    // True

            // 显示使用 new 来分配内存
            // 这时候字符串池机制不能起作用,d 和 a 指向不同对象
            Char chars = { 'a', 'b', 'c', 'd', 'e' };
            string d = new string(chars);
            Console.WriteLine(Object.ReferenceEquals(a, d));    // False
            Console.Read();
        }
    }
}