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

标签 c# .net string memory string-interning

从使用 Reflector 的简要看,它看起来像 String.Substring()为每个子字符串分配内存。我是正确的吗?我认为这没有必要,因为字符串是不可变的。

我的基本目标是创建一个 IEnumerable<string> Split(this String, Char)不分配额外内存的扩展方法。

最佳答案

大多数具有不可变字符串的语言创建新子字符串而不是引用现有字符串的一个原因是因为这会干扰以后对这些字符串进行垃圾收集。

如果一个字符串用于其子字符串,但随后较大的字符串变得不可访问(通过子字符串除外),会发生什么情况。较大的字符串将无法收集,因为这会使子字符串无效。短期看来是节省内存的好方法,但长期来看却是内存泄漏。

关于c# - 为什么 .NET 创建新的子字符串而不是指向现有字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082442/

相关文章:

c#解密存储在sql server中的数据

c# - 嵌套的 ForEach 循环到 Linq

c# - MVVM 和 DI - 如何处理模型对象?

C#模拟音量静音按下

.net - 将字符串转换为流

c# - 如何解决 ReSharper 仅针对显示/值成员的属性的 "unused property"警告?

c# - 异步委托(delegate)与线程/线程池?

arrays - 将 Array[String] 的 Spark 列拆分为 String 列

string - 从字符串中删除两个子字符串

java - 使用正则表达式提取子字符串不起作用