通过[]运算符在字符串中访问字符的char或更快的速度是通过[]运算符访问char []中的char



我有一个简单的问题。我正在使用C#中的巨大string工作,并且我反复浏览它并通过[]操作员访问单个字符。将string变成char[]并在char数组上使用[]操作员还是更快的速度?还是它们都一样?我希望我的程序快速流血。

如果您需要绝对最快实现,则可以掉落到 unsafe并使用指针:

string s = ...
int len = s.Length;
fixed (char* ptr = s)
{
   // talk to ptr[0] etc; DO NOT go outside of ptr[0] <---> ptr[len-1]
}

然后避免范围检查

  • 需要unsafe
  • 如果您走出界限,您应该指责

首先:您应该 MEATUR 。没有人可以确定地回答这个问题。

在这种特殊情况下,所有内容都表明直接访问string的情况更好:字符串几乎是每种语言中的字符数组,并且将字符串转换为char[]将需要立即分配另一个 grigantic grigantic /em>内存量。那不是很好。

,但我不会为此做自己的话。测量

string转换为 char[]的一个明显的缺点是需要复制的:因为c#中的字符串是不可变的,而数组为可突变,您的代码最终将完整复制您的巨型字符串!这几乎可以肯定会使转换后的潜在速度提升(如果有的话)相形见。

string a引擎盖下的 char[]数组。因此,实际上没有区别。

这里更大的问题是,试图在堆栈中优化这一点可能是浪费的时间,可能会有更好的改进可以在其他地方进行。

最新更新