以下は、文字列を逆にするために作成できる最速のコードです
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);
}
この方程式のすべてのボトルネックに対処して、可能な限り高速化したいと考えています。これまでに見つけた唯一のものは、部分的にしか理解していない Array Bounds チェックです。コンパイラを使用して境界をチェックしないことを決定した場合、これを無効にする方法はありますが、ループ内にいる.Length
ときにデクリメントしている場合でも境界チェックを行いますか? for
誰かがこれを変換して、境界チェックを回避するポインタを使用することができます.10万文字以上の範囲の文字列の速度差をテストしたいと思います.
以下のコメントと投稿に基づいて、これは私がこれまでに思いついたものです。
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 文字 + の範囲の反転に対処しています。特にこのような大量の文字でボトルネックがないかどうかを実際に確認するために、ポインターを使用してこれをテストしたいと思います。