3

我有一个简单的问题。我正在使用stringC# 中的一个巨大的东西,我反复浏览它并通过[]运算符访问单个字符。将stringa 转换为 achar[]并在数组上使用[]运算符char更快还是我的方法更快?还是两者都一样?我希望我的程序快速成为前沿。

4

4 回答 4

10

如果您需要绝对最快的实现,那么您可以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
  • 如果你越界,你是罪魁祸首
于 2012-11-01T14:50:31.717 回答
1

首先:你应该测量. 没有人可以在没有测量的情况下明确回答这个问题。

在这种特殊情况下,一切都表明string直接访问更好:字符串在几乎每种语言中都被实现为字符数组,并且char[]手动将字符串转换为需要立即分配另一个巨大的内存量。那可不好。

但我不会相信我自己的话。测量

于 2012-11-01T14:51:21.440 回答
1

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

于 2012-11-01T14:51:22.490 回答
-2

string char[]引擎盖下的数组。所以从字面上看没有区别。

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

于 2012-11-01T14:50:22.350 回答