私は今日、内面を比較する傾向に打たれ、舞台裏で呼ばれるかどうかを知りたいBuffer.BlockCopy
とArray.CopyTo.
思っています。この背後にある実用的な目的はありません。C#言語とその実装方法についての理解を深めたいと思います。銃を飛び越えて私をマイクロ最適化で非難しないでください、しかしあなたは私が好奇心を持っていると非難することができます!Array.CopyTo
Buffer.BlockCopy
私がmscorlib.dllでILdasmを実行したとき、私はこれを受け取りましたArray.CopyTo
.method public hidebysig newslot virtual final
instance void CopyTo(class System.Array 'array',
int32 index) cil managed
{
// Code size 0 (0x0)
} // end of method Array::CopyTo
そしてこれはBuffer.BlockCopy
.method public hidebysig static void BlockCopy(class System.Array src,
int32 srcOffset,
class System.Array dst,
int32 dstOffset,
int32 count) cil managed internalcall
{
.custom instance void System.Security.SecuritySafeCriticalAttribute::.ctor() = ( 01 00 00 00 )
} // end of method Buffer::BlockCopy
率直に言って、これは私を困惑させます。作成していないdll/exeでILdasmを実行したことはありません。これは、これらの機能がどのように実装されているかを確認できないことを意味しますか?周りを検索すると、スタックオーバーフローの質問が明らかになっただけで、MarcGravellはそれを言いました
[
Buffer.BlockCopy
]は基本的に生のmem-copyのラッパーです
Array.CopyTo
洞察に満ちていますが、電話しても私の質問には答えられませんBuffer.BlockCopy
。これらの2つの関数がどのように実装されているかを確認できるかどうか、およびC#の内部について将来質問がある場合は、調査できるかどうかに特に関心があります。それとも私は運が悪いのですか?