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

2023-11-22

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

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


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col

随机推荐

  • Android 的代理混淆了文档资源

    在我看来 关于 Android 上的代理主题有很多令人困惑的资源 首先 似乎所有的方法代理类已被宣布弃用 建议 使用标准 java vm 代理值来查找主机 端口和 排除列表 此调用会忽略排除列表 官方java vm 代理值可以通过以下方式访
  • 如何使用 sed 删除模式之前的换行符/换行符

    标题已经说明了 我想使用一些 linux oneliner 例如 sed 转变 Anytext into Anytext 这可以使用 sed 来完成吗 或者如果不使用 sed 则使用 awk oneliner 来完成 Sure sed N
  • 使用 ONE JavaFX 8 DatePicker 选择一个时间段或日期

    在我当前正在工作的应用程序中 需要从同一个 JavaFX 8 DatePicker 中选择单个日期或时间段 这样做的首选方法如下 选择单个日期 与 DatePicker 的默认行为相同 选择时间段 按住鼠标按钮并拖动到所需的结束 开始日期来
  • 安装 tabulizer 包时遇到问题

    我使用以下代码来安装tabulizer包裹 ghit install github c ropenscilabs tabulizerjars ropenscilabs tabulizer INSTALL opts no multiarch
  • vb.net错误:由于其保护级别而无法访问

    我是第一次使用 vb net 代码 但我有 5 年的 C 经验 从以前的开发人员那里得知 服务器上的代码运行良好 没有任何错误 但是当我打开网站文件夹 该网站没有解决方案文件 时 我尝试构建该网站 然后得到了大量错误说 未声明 labelC
  • 如何用python将协议号转换为名称?

    tcp udp等协议都是用数字来表示的 import socket socket getprotocobyname tcp 上面的代码将返回 6 如果我知道协议号 如何获取协议名称 我想说几乎肯定有比这更好的方法 但是所有协议名称 和值 都
  • 如何从 Windows 卸载 mongodb

    我看到一个教程说要运行这个 C mongodb bin mongod exe config C mongodb mongod conf remove 但该命令不起作用 因为没有mongod conf文件位于我的 Windows 中的 mon
  • Eclipse CVS 变更列表

    有没有办法查看 eclipse 项目中所有最近更改的文件 包括其他 CVS 用户最近更改的文件 谢谢 这里还有一个 Eclipse 变更日志插件 http code google com a eclipselabs org p change
  • svn 签出时“网络连接意外关闭”

    当我尝试结账时 svn checkout svn ssh serveradmin email protected home 87292 data svn repository trunk 我收到这个 无用的 错误 svn 网络连接意外关闭
  • pycharm 中的“预期语句结束”[重复]

    这个问题在这里已经有答案了 为什么我会收到此错误 请参阅 linting 说 预计声明结束 在pycharm中 我对 python 很陌生 尝试在 Python3 中使用括号进行打印 即print x 代替print x
  • 在间隔列表中搜索间隔重叠?

    假设 a b 表示从 a 到 b 的实线上的区间 a 给定一个间隔列表 x1 y1 x2 y2 找到与 x y 重叠的所有此类间隔的最有效方法是什么 显然 我可以尝试每一个并在 O n 内得到它 但我想知道是否可以以某种巧妙的方式对间隔列表
  • 错误:(59, 8) 错误:无法访问 android.support.v4.app.ActivityCompatApi23 的 ActivityCompatApi23 类文件。

    这是我的 build gradle apply plugin com android application android compileSdkVersion 25 buildToolsVersion 26 0 2 android con
  • 如何使用 SelectionModel 以编程方式选择材质树节点?

    我有一棵带有复选框的树 我们在这里使用 Material 的例子 我希望开始检查水果节点 如何检查这些节点 我看到SelectionModel has a select 示例传递节点的方法 但在示例中 构成树的数据是一个数组TodoItem
  • Android 中的屏幕亮度值

    如何获取活动的当前屏幕亮度 以下方法可以很好地通过调用将亮度设置为最大setBrightness 100 private void setBrightness int brightness WindowManager LayoutParam
  • 如何在 Windows Azure 辅助角色中安排任务

    我运行一个简单的 Azure Worker 角色 每天中午 12 点执行一项任务 下面是完成此操作的代码 public override void Run try while true int time Convert ToInt32 Da
  • Keydown 哪个不工作 Chrome 扩展

    我一直在为谷歌扩展的想法而苦苦挣扎 而你一如既往地是我最后的希望 好吧 我想单击 chrome 扩展上的按钮 这将导致页面扩展上的 keydown 模拟正在运行 我认为 chrome 在我的想法上有一些安全问题 它会阻止键盘模拟 使事件 i
  • 如何获得选择最短旋转方向的角度

    我的游戏中有一个角色必须平滑旋转才能达到所需的角度 考虑angle作为当前角度和touchAngle作为所需的角度 始终在 0 到 360 之间 我想在每次游戏更新中将 1 1 添加到当前角度以获得所需的角度touchAngle 问题是首先
  • 提交响应后是否可以从 servlet 过滤器转发或重定向?

    逻辑是过滤器被命中 条件不为真 所以它通过过滤器链 提交响应后 过滤器被命中 并且条件现在为真 请求属性已设置 它进去执行转发 但页面从未转发 我知道这与提交的响应有关 因为我测试了它在第一次到达链之前转发的不同逻辑 并且它确实转发成功 p
  • 如何开发具有混响功能的 iPhone 应用程序?

    我正在开发 iPhone 应用程序 如音频处理 我必须给音频添加一些效果 如果是桌面应用程序 有很多选择 我们可以获得很好的例子和完整的项目 比如大胆 但我想为 iPhone 开发 我有一个带有混响选项的应用程序 看看下面的链接 只是我看
  • 为什么 .NET 创建新的子字符串而不是指向现有字符串?

    从使用 Reflector 的简要观察来看 它看起来像String Substring 为每个子字符串分配内存 我的说法正确吗 我认为这没有必要 因为字符串是不可变的 我的根本目标是创建一个IEnumerable