以下是我能创建的最快的反转字符串的代码。
我希望解决此方程中的每个瓶颈,使其尽可能快。到目前为止,我只发现了部分理解的数组边界检查是唯一的瓶颈。是否有任何方法可以禁用它?如果您使用
根据下面的评论和帖子,这是我迄今为止想出的。
public static void ReverseFast(string x)
{
string text = x;
StringBuilder reverse = new StringBuilder();
for (int i = text.Length - 1; i >= 0; i--)
{
reverse.Append(text[i]);
}
Console.WriteLine(reverse);
}
我希望解决此方程中的每个瓶颈,使其尽可能快。到目前为止,我只发现了部分理解的数组边界检查是唯一的瓶颈。是否有任何方法可以禁用它?如果您使用
.Length
,编译器将决定不检查边界,但如果像我在for
循环中递减,它仍然会进行边界检查吗?有人能把这个转换成使用指针的方式,从而避免边界检查吗?我想测试100k+字符范围内字符串速度差异。根据下面的评论和帖子,这是我迄今为止想出的。
public static void ReverseFast(string x)
{
StringBuilder reverse = new StringBuilder(x.Length);
for (int i = x.Length - 1; i >= 0; i--)
{
reverse.Append(x[i]);
}
Console.WriteLine(reverse);
}
上述解决方案比建议的重复问题答案快得多。这个问题实际上是针对5000 * 26个字符范围内的反转。我仍然希望使用指针进行测试,以查看是否存在瓶颈,特别是在如此大量的字符情况下。
new StringBuilder(text.Length)
替换new StringBuilder()
可以消除所有不必要的内存[重新]分配。 - GSergstackalloc
。 - GSerg