c# – 从char []创建不安全的字符串

我正在研究一种高性能代码,其中这个结构是性能关键部分的一部分.

这是在某些部分中发生的情况:

>字符串被“扫描”并且元数据被有效存储.
>基于此元数据,主字符串的块被分成char [] [].
>那个char [] []应该转换成一个字符串[].

现在,我知道你可以调用新的字符串(char []),但结果必须被复制.

为了避免这个额外的复制步骤发生,我想我必须可以直接写入字符串的内部缓冲区.即使这将是一个不安全的操作(我知道这带来了许多影响,如溢出,向前兼容).

我已经看到了实现这一目标的几种方法,但没有一种我真的很满意.

有没有人有关于如何实现这一目标的真实建议?

额外的信息:
实际过程不包括转换为char []必然,它实际上是一个’多子串’操作.像3个索引和附加的长度.

StringBuilder对于少量的concats来说有太多的开销.

编辑:
由于我所要求的一些含糊不清的方面,让我重新拟定它.

这是发生的事情:

>主字符串已编入索引.
>主字符串的一部分被复制到char [].
> char []转换为字符串.

我想要做的是合并第2步和第3步,结果是:

>主字符串已编入索引.
>主要字符串的一部分被复制到一个字符串(并且GC在此过程中可以通过正确使用fixed关键字来保持其手离开?).

需要注意的是,我无法从string []更改输出类型,因为这是一个外部库,项目依赖于它(向后兼容性).

解决方法

如果您这样做会发生什么:
string s = GetBuffer();
fixed (char* pch = s) {
    pch[0] = 'R';
    pch[1] = 'e';
    pch[2] = 's';
    pch[3] = 'u';
    pch[4] = 'l';
    pch[5] = 't';
}

我认为世界将会结束(或者至少是.NET管理的部分),但这与StringBuilder的作用非常接近.

您是否有分析器数据显示StringBuilder不够快,或者这是一个假设?

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...