我正在处理一个高性能代码,其中这个构造是关键性能部分的一部分。
在一些部分中发生了以下情况:
1.扫描字符串并有效地存储元数据。 2.根据此元数据将主字符串的块分成一个char[] []。 3.该char[][]应转换为string[]。
现在我知道你可以调用new string(char[]),但结果必须被复制。
为了避免发生这个额外的复制步骤,我猜想可能可以直接写入字符串的内部缓冲区。尽管这将是一种不安全的操作(我知道这会带来很多问题,如溢出,向前兼容等)。
我看到了几种实现方式,但都不太满意。
有没有人有真正的建议如何实现这个?
额外信息: 实际过程不一定需要转换为char[],它实际上是一个“多子串”操作。像3个索引和它们的长度附加在一起。
StringBuilder对于少量连接来说开销太大。
由于我所问的内容有些模糊,让我重新阐述一下。
这是发生的事情:
1.主字符串被索引。
2.主字符串的某些部分被复制到char[]中。
3.char[]被转换为string。
我想做的是在步骤2和3中合并,结果是:
1.主字符串被索引。
2.主字符串的某些部分被复制到string中(并且GC可以通过正确使用fixed关键字在过程中避免它?)。
我不能改变输出类型从string[],因为这是一个外部库,并且项目依赖于它(向后兼容)。
在一些部分中发生了以下情况:
1.扫描字符串并有效地存储元数据。 2.根据此元数据将主字符串的块分成一个char[] []。 3.该char[][]应转换为string[]。
现在我知道你可以调用new string(char[]),但结果必须被复制。
为了避免发生这个额外的复制步骤,我猜想可能可以直接写入字符串的内部缓冲区。尽管这将是一种不安全的操作(我知道这会带来很多问题,如溢出,向前兼容等)。
我看到了几种实现方式,但都不太满意。
有没有人有真正的建议如何实现这个?
额外信息: 实际过程不一定需要转换为char[],它实际上是一个“多子串”操作。像3个索引和它们的长度附加在一起。
StringBuilder对于少量连接来说开销太大。
由于我所问的内容有些模糊,让我重新阐述一下。
这是发生的事情:
1.主字符串被索引。
2.主字符串的某些部分被复制到char[]中。
3.char[]被转换为string。
我想做的是在步骤2和3中合并,结果是:
1.主字符串被索引。
2.主字符串的某些部分被复制到string中(并且GC可以通过正确使用fixed关键字在过程中避免它?)。
我不能改变输出类型从string[],因为这是一个外部库,并且项目依赖于它(向后兼容)。
char[]
引入,然后存储所需子部分的位置和长度的int,int
对,每当需要时引用原始数组以提取子字符串,而不是试图找到映射到string[]
的方法而不再复制? - Jamie TreworgyStringBuilder
内部持有一个普通的字符串,并且可以进行修改。它不使用char[]
来进行追加。 - Aidiakapi