从使用 Reflector 的简要看,它看起来像 String.Substring()
为每个子字符串分配内存。我是正确的吗?我认为这没有必要,因为字符串是不可变的。
我的基本目标是创建一个 IEnumerable<string> Split(this String, Char)
不分配额外内存的扩展方法。
最佳答案
大多数具有不可变字符串的语言创建新子字符串而不是引用现有字符串的一个原因是因为这会干扰以后对这些字符串进行垃圾收集。
如果一个字符串用于其子字符串,但随后较大的字符串变得不可访问(通过子字符串除外),会发生什么情况。较大的字符串将无法收集,因为这会使子字符串无效。短期看来是节省内存的好方法,但长期来看却是内存泄漏。
关于c# - 为什么 .NET 创建新的子字符串而不是指向现有字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082442/