c# - 优化字符串操作
问题描述
现在是 2019 年,我们有一个使用大型机作为数据存储和交易的银行项目。
我们正在使用 DTO(Commarea,纯 c# 类),它被转换为纯字符串(这就是大型机的工作方式),然后发送到大型机。
在将类转换为字符串表示时,我们使用了几个字符串操作,例如子字符串、左填充、右填充、修剪等。
可以想象,这会导致多次字符串分配,从而导致垃圾收集。它通常在第 0 代,但仍然存在。
特别是像Decimal
which is a Pack type
in mainframe 这样适合 8 个字节的类型会创建几个字符串。
我尝试使用ReadonlySpan<char>
例如子字符串。见例子。
但是,有些操作不可用PadRight
,PadLeft
因为它是只读跨度。
更新: 澄清转换的一部分发生如下:
val.Trim().Substring(5).PadRight(10);
我知道这会创建 3 个字符串。我知道字符串是不可变的。ReadonlySpan
我的问题是关于使用or进行上述操作Memory
。
我不能仅将 ReadonlySpan 用于子字符串,因为一旦我调用ToString
方法,我就会失去好处。
最后我必须ToString
一路打电话。
是否有另一个结构支持子字符串后面的其他操作,我实际上可以将删除数据添加到内存中?
谢谢。
解决方案
推荐阅读
- reactjs - Mapbox GL、Deck GL 和 React Map GL 之间的底层架构是什么?
- matplotlib - seaborn.swarmplot 符号比例的问题:零没有扩展
- html - 如何使用 EMBED 或 OBJECT html 标签加载本地 mp4 视频文件?可能吗?
- cakephp - CakePHP 4:Cake Bake 错误,找不到文件异常
- java - 线程“WindowsNativeRunloopThread”java.lang.NoSuchMethodError 中的异常:
当我执行 .jar 文件时 - php - wp_safe_redirect(); 不是重定向,它只是打印给定的变量?
- javascript - 用JS改变视频分辨率
- sql-server - 根据同一字段中的值计算百分比
- java - 如何定期更改画布对象的颜色?
- python - 数据帧中的平衡行样本与给定分类目标列的熊猫