微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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不够快,或者这是一个假设?

原文地址:https://www.jb51.cc/csharp/100226.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐