我有一个简单的问题。我正在使用C#中的一个巨大的string
,我会反复浏览它并通过[]
运算符访问单个字符。将string
转换为char[]
并使用[]
数组上的char
运算符或更快的方法是否更快?或者他们都是一样的?我希望我的程序快速前进。
答案 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[]
阵列。所以实际上没有区别。
更大的问题是,尝试在堆栈中优化这一点可能是浪费时间,在其他地方可能会有更好的改进。