4

Array.Reverse()C# で何にコンパイルされ、どのような最適化が行われるかを知りたいです。

私の研究は、次のような XOR 法であるいくつかの注目すべき道のりで、私を複数の道に導きました。

Reverse(Array)
{

   for(int i = 0, int len = Array.Length; i < Array.Length, i++ len--)
   {
       Array[i] ^= Array[len];
       Array[len] ^= Array[i];
       Array[i] ^= Array[len];
   }
}

これは、より小さな配列を操作する能力が非常に高いことがわかりました。サイズが大きくなるにつれてパフォーマンスが低下し始めますが、逆プロセスのメモリ内の性質により、最適なメモリ アプリケーションを備えているように見えます。

配列を逆にする 2 番目に注目すべき方法は、一時配列を使用することです。これは非常に簡単なので書きません。ただし、基本的には、初期配列の最初の要素を一時配列の最後の要素に設定します。この方法は、メモリが問題にならない場合に最速の方法になる傾向があります。

だから私の質問はこれArray.Reverse()です、特定の方法を使用しますか? そうでない場合、使用する方法をどのように決定しますか? これは、システム ライブラリとコンパイラを信頼して最速のソリューションを決定する必要があるかどうか、およびその決定を正確にどの程度信頼する必要があるかにかかっています。

4

1 に答える 1

4

Array.Reverse現在、一時配列を使用して .NET フレームワークに実装されています。これは ILSpy を使用して確認できます。コンパイラはこれについて何も言いません。メソッドは特定の方法で実装されており、コンパイラがここで変更するものは何もありません。

これが最適なソリューションであるかどうかは、何を最適と見なすかによって異なるため、それを自分で定義し、プロファイラーをアタッチして検証する必要があります。

于 2013-04-30T13:12:13.767 に答える