我有一个简单的问题。我正在使用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[]
数组。因此,实际上没有区别。
这里更大的问题是,试图在堆栈中优化这一点可能是浪费的时间,可能会有更好的改进可以在其他地方进行。