参考在这里:http: //msdn.microsoft.com/en-us/library/system.string.intern.aspx
看起来这是由编译器自动完成的,但也可以手动完成。如果我错了,请纠正我并对此进行更多说明。语言是 C#、VB.Net、C++/CLI 还是其他语言是否重要?
谢谢。
参考在这里:http: //msdn.microsoft.com/en-us/library/system.string.intern.aspx
看起来这是由编译器自动完成的,但也可以手动完成。如果我错了,请纠正我并对此进行更多说明。语言是 C#、VB.Net、C++/CLI 还是其他语言是否重要?
谢谢。
当很有可能重复值(几乎是枚举,但不完全)时,我已经完成了反序列化/实现代码。在反序列化数千条记录时,这可以带来显着的内存优势。但是,在这种情况下,您可能更喜欢使用单独的实习生缓存,以避免使共享缓存饱和(或者共享缓存很好;这取决于场景)。
但关键点是:您可能有很多不同的字符串实例具有相同的值。反序列化是一个很大的候选者。还应该注意的是,在检查内部缓存时会有一些 CPU 开销(添加数据时开销会逐渐增加),因此如果构造的对象有可能超过 gen-0,则应该这样做; 如果无论如何它们总是会被快速收集,那么将它们换成实习版本是不值得的。
当分析表明它可以带来性能优势时,这样做是个好主意。
它由运行时完成,但一种语言可以引入其自己的具有不同行为的字符串类型。它仅适用于文字字符串。如果你想实习动态创建的字符串,你可以这样做。一方面,它使比较字符串变得非常简单,但请记住,虽然某些操作会从实习中受益,但其他操作不会。例如,实习字符串在进程关闭之前不会被释放(因为它们是由内部结构根植的,请参阅this question了解详细信息),因此如果您手动实习大量字符串,该进程将携带大量内存。