5

Array.Sort 内で、

[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail), SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool TrySZSort(Array keys, Array items, int left, int right);

呼ばれます。これがどのように実装されているかについてのアイデアはありますか?

4

2 に答える 2

11

SSCLI20ソースディストリビューションからCLRソースコードのかなり信頼できるコピーを入手できます。これは2005年に公開され、当時はCLRバージョン2のかなり正確なコピーでした。明らかな不一致は見つかりませんでした。

それはそれ以来、すでに7年前に進んでおり、それ以来、かなりメジャーなCLRバージョンの更新が行われています。しかし、TrySZSort()はまだ存在しており、これらの低レベルの実装は高度に自己保存的です。clr / src / vm / ecall.cppで宣言され、clr / src / vm/arrayhelpers.cppで宣言されたC++メソッドであるArrayHelper::TrySZSort()にマップされています。

それ以外の点では非常にArrayHelpers<T>.QuickSort()退屈です。値型要素の配列要素型に特化した、 という名前のテンプレートクラスメソッドを呼び出すだけです。

これは、トニー・ホーアが52年前に書いた方法です。C ++ではありませんが;)

この回答では、このコードがC#ではなくC++で記述されている理由がわかります。

于 2012-08-14T01:34:49.153 に答える
4

これがどのように実装されているかについてのアイデアはありますか?

このメソッドは、CLR 自体の内部にあるネイティブ コードで実装されます。非常にコアな低レベルの型には、このような多くのメソッドがあります。たとえば、かなりの数のメソッドがInternalCallSystem.Stringにフラグ付けされ、共通言語ランタイム自体に実装されています。

于 2012-08-14T01:12:47.467 に答える