簡単な質問があります。私はC#で巨大なものを使って作業していて、それを繰り返し調べて、演算子stringを介して個々の文字にアクセスしています。[]をにstring変換して配列で演算子char[]を使用する方が速いですか、それとも私のアプローチは速いですか?それとも両方とも同じですか?私は自分のプログラムを最先端にしたいと思っています。[]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
stringaをに変換することの明らかな欠点の1つchar[]は、コピーする必要があることです。C#の文字列は不変ですが、配列は変更可能であるため、コードは巨大な文字列全体を複製することになります。これは、変換後に得られる可能性のある速度の向上があれば、それをほぼ確実に小さくします。
于 2012-11-01T14:51:22.490 に答える
-2
string ボンネットの下のchar[]配列です。したがって、文字通り違いはありません。
ここでのより大きな問題は、スタック内でこれを最適化しようとすると時間が無駄になる可能性があり、他の場所でより良い改善が行われる可能性があることです。
于 2012-11-01T14:50:22.350 に答える