通过[]运算符访问字符串中的char更快或通过[]运算符访问char []中的char更快吗?

时间:2012-11-01 14:48:15

标签: c# string performance

我有一个简单的问题。我正在使用C#中的一个巨大的string,我会反复浏览它并通过[]运算符访问单个字符。将string转换为char[]并使用[]数组上的char运算符或更快的方法是否更快?或者他们都是一样的?我希望我的程序快速前进。

4 个答案:

答案 0 :(得分:7)

如果您需要绝对最快的实现,那么您可以转到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
  • 如果你走出界限,你应该受到责备

答案 1 :(得分:2)

首先:你应该衡量。没有衡量,没有人能够最终回答这个问题。

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

但我不会为此事自己说话。 测量

答案 2 :(得分:1)

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

答案 3 :(得分:0)

string 一个char[]阵列。所以实际上没有区别。

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