Tag: string interning

为什么.NET会创建新的子字符串而不是指向现有的字符串?

从使用Reflector的简短外观看,它看起来像String.Substring()为每个子字符串分配内存。 我是否纠正这种情况? 我认为没有必要,因为字符串是不可变的。 我的基本目标是创建一个IEnumerable Split(this String, Char)扩展方法,该方法不分配额外的内存。

在.NET中,实习字符串是否从垃圾收集中排除?

我正在努力减少进行Gen2收集所需的时间。 我的应用程序创建并保存了大量的字符串对象,这些对象在其生命中持续存在。 减少扫描对象的数量应减少GC时间。 我想知道实习池是否被排除在垃圾收集之外。 无论如何,没有任何东西要收集。 如果是这样,我可以实习所有这些字符串并加速GC。

实习生字符串文字误解?

我不明白: MSDN说 http://msdn.microsoft.com/en-us/library/system.string.intern.aspx 因此,具有特定值的文字字符串实例仅在系统中存在一次。 例如,如果将相同的文字字符串分配给多个变量,则运行时将从实习池中检索对文字字符串的相同引用,并将其分配给每个变量。 这种行为是默认的(没有实习生)吗? 或者使用Intern方法? 如果是默认值,为什么我要使用实习生? (实例将一次……)? 如果它是NOT默认值:如果我写了1000次这一行: Console.WriteLine( “LALALA”); 1)我会在记忆中得到1000次“lalala”吗? (不使用实习生…) 2)将“lalala”最终Gc’ed? 3)“lalala”是否已被实习? 如果确实如此,为什么我需要从池中“获取”它,而不是再次写“lalala”? 我有点困惑。