C#中的字符串常量内存池

Pra*_*K M 9 c# memory string

大家都知道.Net框架中的String对象直接存储在堆内存中

我只是想了解.Net框架中是否有任何保留内存用于字符串.在java中,有一个名为SCMP(字符串常量内存池)的字符串保留内存,其中字符串初始化和垃圾收集就像堆内存中的其他对象一样.

Rah*_*thi 6

我不认为.Net中有类似的东西.

相反,我已经阅读了这个以及它有趣的字符串使用方式:

CLR维护一个名为实习池的表,该表包含程序中的文字字符串.这可以确保在代码中重复使用相同的常量字符串将使用相同的字符串引用.System.String类提供了一个Intern方法,该方法确保字符串位于实习池中并返回对它的引用.

另请查看此MSDN: -

我们已经看到了许多场景,其中托管堆包含重复数千次的相同字符串.结果是一个很大的工作集,其中大部分内存被字符串消耗.在这种情况下,通常最好使用字符串实习.


Joe*_*Lee 1

在 .NET 中,文字字符串是“驻留”的,因此每个文字字符串只有一份副本。

请参阅http://msdn.microsoft.com/en-us/library/system.string.intern.aspx

  • 这可能只是我的迂腐,但我说“误导”,因为你答案的第一部分可能会被误解为暗示所有字符串都被拘留。 (3认同)