C# 字符串实习-这段代码应该只在内存中创建10个字符串吗?

C# 字符串实习-这段代码应该只在内存中创建10个字符串吗?,c#,C#,似乎创造了更多。请建议为什么或如何在这里正确实习 谢谢 IList<string> list = new List<string>(10000); for (int i = 0; i < 10000; i++) { for (int k = 0; k < 10; k++) { list.Add(string.Intern(k.ToS

似乎创造了更多。请建议为什么或如何在这里正确实习

谢谢

        IList<string> list = new List<string>(10000);

        for (int i = 0; i < 10000; i++)
        {
            for (int k = 0; k < 10; k++)
            {
                list.Add(string.Intern(k.ToString()));
            }
        }

        Console.WriteLine("intern Done");
        Console.ReadLine();
IList列表=新列表(10000);
对于(int i=0;i<10000;i++)
{
对于(int k=0;k<10;k++)
{
list.Add(string.Intern(k.ToString());
}
}
控制台。写入线(“实习生完成”);
Console.ReadLine();

它将在循环过程中创建更多的字符串(每次迭代将生成一个新字符串,然后将其替换为插入值),但生成的列表应该只有10个对插入字符串值的唯一引用


完成后,interning表应包含10个字符串(对于k值),以及“intern Done”和应用程序中的任何其他文字字符串。

它将在循环过程中创建更多字符串(每次迭代将生成一个新字符串,然后将其替换为interning值),但是您的结果列表应该只有10个对内部字符串值的唯一引用


完成后,interning表应包含10个字符串(对于k值),以及“intern Done”和应用程序中的任何其他文字字符串。

根据intellisense,(1000)只是列表的初始大小-可能会提高性能(假设您需要全部1000!)给它一个大小,这样它就不必每次向集合中添加项时都在内存中创建一个新的单一分配。

根据intellisense的说法,(1000)只是列表的初始大小-可能会提高性能(假设你需要全部1000!)给它一个大小,这样它就不必创建新的,每次将项目添加到集合中时,都会在内存中进行单一分配。

列表不会在每次添加时进行单一分配。虽然我没有在Reflector中运行它,但我可以想象它会在每次达到容量时增加一半的空间,使当前空间翻倍。此外,这与生成的字符串数量无关,因为每次“翻倍”都会通过引用将字符串复制到新列表中。列表只存储对字符串本身的引用。
list
不会在每次添加时进行单一分配。虽然我没有在Reflector中运行它,但我可以想象它会在每次达到容量时增加一半的空间,使当前空间翻倍。此外,这与生成的字符串数量无关,因为每次“翻倍”都会通过引用将字符串复制到新列表中。该列表仅存储对字符串本身的引用。