我有一个简单的问题。我正在使用string
C# 中的一个巨大的东西,我反复浏览它并通过[]
运算符访问单个字符。将string
a 转换为 achar[]
并在数组上使用[]
运算符char
更快还是我的方法更快?还是两者都一样?我希望我的程序快速成为前沿。
问问题
1714 次
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 回答