ホームページ > バックエンド開発 > C++ > C# で配列をコピーする場合、`Buffer.BlockCopy` は他の方法よりも高速ですか?

C# で配列をコピーする場合、`Buffer.BlockCopy` は他の方法よりも高速ですか?

Barbara Streisand
リリース: 2024-12-29 17:07:14
オリジナル
154 人が閲覧しました

Is `Buffer.BlockCopy` Faster Than Other Methods for Copying Arrays in C#?

C# での配列のコピーは Buffer.BlockCopy を使用すると高速になりますか?

C# では配列をコピーする方法がいくつかあり、それぞれパフォーマンスが異なります。一般的な方法の 1 つは、提供されているパフォーマンスの遅いコード例に見られるように、ループ コピーです。ただし、パフォーマンスを向上させるために、Buffer.BlockCopy を使用できます。

配列コピー用の Buffer.BlockCopy

Buffer.BlockCopy は、効率的なプリミティブ型の操作用に特別に設計されています。その主な機能は、指定されたバイト数をソースから宛先にコピーして、パフォーマンスを最適化することです。要素を操作する Array.Copy などの Array のメソッドとは異なり、Buffer.BlockCopy は最大速度を実現するためにバイトを直接コピーします。

問題への Buffer.BlockCopy の適用

提供されたコードで Buffer.BlockCopy を実装するには、次の変更を行うことができます。 made:

for (int i = 0; i < sortedIndex.Length; i++) {
    Buffer.BlockCopy(sortedIndex, i * sizeof(double), leftnode, i * 3 * sizeof(double), sizeof(double));
    Buffer.BlockCopy(sortedInstances, i * sizeof(double), leftnode, (i * 3 + 1) * sizeof(double), sizeof(double));
    Buffer.BlockCopy(sortedLabels, i * sizeof(double), leftnode, (i * 3 + 2) * sizeof(double), sizeof(double));
}
ログイン後にコピー

プリミティブ値をバイトのブロックとして直接コピーすることにより、コードは Buffer.BlockCopy の最適化されたメモリ処理機能を活用します。

高度なオプション: System.Buffer。 memcpyimpl

パフォーマンスを向上させる可能性があるため、デリゲートをバインドすることを検討してください。 System.Buffer.memcpyimpl。このメソッドは、.NET Framework の最低レベルのメモリ コピー機能を提供します。ただし、ポインタが必要で、Buffer.BlockCopy と比べて速度が大幅に向上しない可能性があります。

ベンチマーク結果

ベンチマーク テストでは、Buffer.BlockCopy が Array よりも一貫して高速であることが示されています。 .Copy と同様に、System.Buffer.memcpyimpl は場合によってはわずかに高いパフォーマンスを提供します。ただし、速度の差はそれほど大きくありません。一般に、Buffer.BlockCopy は、配列を高速にコピーするためのシンプルで効果的なソリューションを提供します。

以上がC# で配列をコピーする場合、`Buffer.BlockCopy` は他の方法よりも高速ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート