配列内の 2 つの KeyValuePair オブジェクトを交換するための現在のスワップ コードを次に示します。
KeyValuePair<int, T> t = a[i];
a[i] = a[j];
a[j] = t;
安全でないコードを使用し、2 つのオブジェクトのポインターを交換するだけで、速度の利点はありますか? それとも、コンパイラはこの安全なコードを効果的に煮詰めて、それを効果的に行うのでしょうか?
配列内の 2 つの KeyValuePair オブジェクトを交換するための現在のスワップ コードを次に示します。
KeyValuePair<int, T> t = a[i];
a[i] = a[j];
a[j] = t;
安全でないコードを使用し、2 つのオブジェクトのポインターを交換するだけで、速度の利点はありますか? それとも、コンパイラはこの安全なコードを効果的に煮詰めて、それを効果的に行うのでしょうか?
いいえ、これ以上速くなりません。
これは、最悪の場合、時期尚早のマイクロ最適化です。
実際には、配列へのポインターを取得するために(fixedキーワードを使用して) 配列を固定する必要があるため、桁違いに遅くなります。
最適化ごとに .Net ポインター用のスペースがあります。あなたの特定のケースではあまりありませんが、循環冗長性チェックのようなものは、ポインターがより最適なソリューションを提供してくれます。