每个人都知道.Net框架中的String对象直接存储在堆内存中
我只是想了解.Net框架中是否有任何用于字符串的保留内存。在java中,有一个名为SCMP(字符串常量内存池)的字符串保留内存,其中字符串初始化和垃圾收集就像堆内存中的其他对象一样。
答案 0 :(得分:6)
我不认为.Net中有类似的东西。
相反,我读过 this ,其中有趣的是如何使用字符串:
CLR维护一个名为实习池的表,其中包含 程序中的文字字符串。这确保了重复使用 代码中相同的常量字符串将使用相同的字符串 参考。 System.String类提供了一个Intern方法 确保字符串位于实习池中并返回引用 它
同时检查此MSDN: -
我们已经看到了托管堆包含的许多场景 相同的字符串重复了数千次。结果是一个很大的工作 设置字符串消耗大量内存的位置。在这 情况,通常最好使用 string interning.
答案 1 :(得分:2)
在.NET中,文字字符串是“实习”的,因此每个文字字符串只有一个副本。
请参阅http://msdn.microsoft.com/en-us/library/system.string.intern.aspx
答案 2 :(得分:1)
.Net框架在表Intern Pool
中保存字符串存储。你可能会看到:
String interning and String.Empty - Eric Lippert
如果在一个编译单元中有两个相同的字符串文字,那么 我们生成的代码确保只创建一个字符串对象 CLR用于程序集中该文字的所有实例。这个 优化称为“字符串实习”。
String Interning .Net framework
公共语言运行库通过维护来保存字符串存储 表,称为实习池,包含对其的单个引用 以编程方式声明或创建的每个唯一文字字符串 你的计划。因此,带有一个文字字符串的实例 特殊值仅在系统中存在一次。