ホームページ > バックエンド開発 > C++ > C# で複数の配列を 3D 配列にコピーするときに、Buffer.BlockCopy によってパフォーマンスがどのように向上しますか?

C# で複数の配列を 3D 配列にコピーするときに、Buffer.BlockCopy によってパフォーマンスがどのように向上しますか?

Mary-Kate Olsen
リリース: 2025-01-04 01:01:39
オリジナル
257 人が閲覧しました

How Can Buffer.BlockCopy Improve Performance When Copying Multiple Arrays into a 3D Array in C#?

C での配列コピーのパフォーマンスの向上

複数の配列を 1 つの 3 次元配列にコピーする効率を向上させるために、開発者は次のような場合にパフォーマンスの問題に遭遇しました。次のコードを実行します:

for (int i = 0; i < sortedIndex.Length; i++) {
    if (i < num_in_left)
    {    
        // add instance to the left child
        leftnode[i, 0] = sortedIndex[i];
        leftnode[i, 1] = sortedInstances[i];
        leftnode[i, 2] = sortedLabels[i];
    }
    else
    { 
        // add instance to the right child
        rightnode[i-num_in_left, 0] = sortedIndex[i];
        rightnode[i-num_in_left, 1] = sortedInstances[i];
        rightnode[i-num_in_left, 2] = sortedLabels[i];
    }                    
}
ログイン後にコピー

を使用した高速な解決策Buffer.BlockCopy

パフォーマンスの問題に対処するために、より高速な代替手段として Buffer.BlockCopy が導入されました。その主な目的は、ドキュメントに記載されているように、高速操作を容易にすることです:

このクラスは、System.Array クラスの同様のメソッドよりもプリミティブ型を操作するパフォーマンスが優れています。

Buffer。 BlockCopy は多次元配列を操作できます。最適なパフォーマンスを確保するには、要素数ではなくコピーするバイト数を指定し、プリミティブ配列を操作することが重要です。

配列を 3D 配列に結合するメソッド

応答3 つの 1D 配列を 3D 配列に結合することを目的とした更新された質問に対して、次のような魔法が考えられます。適用:

double[] sortedIndex, sortedInstances, sortedLabels;
// copy them over to a 3d array
double[] leftnode = new double[sortedIndex.Length, 3];
// magic happens here
leftnode = {sortedIndex, sortedInstances, sortedLabels};
ログイン後にコピー

ベンチマーク比較

最適なアプローチを決定するために、Array.Copy、Buffer.BlockCopy、および Buffer.memcpyimpl の 3 つのメソッドを使用してベンチマーク テストを実施しました。結果から、これらのメソッドは非常に競争力があり、一般に Buffer.memcpyimpl が最も速いことが明らかになりました。ただし、パフォーマンスの違いはわずかであるため、1 つの方法を他の方法よりも選択することに過度に焦点を当てる必要はありません。

以上がC# で複数の配列を 3D 配列にコピーするときに、Buffer.BlockCopy によってパフォーマンスがどのように向上しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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