Heim > Backend-Entwicklung > C++ > Wie kann Buffer.BlockCopy die Leistung beim Kopieren mehrerer Arrays in ein 3D-Array in C# verbessern?

Wie kann Buffer.BlockCopy die Leistung beim Kopieren mehrerer Arrays in ein 3D-Array in C# verbessern?

Mary-Kate Olsen
Freigeben: 2025-01-04 01:01:39
Original
235 Leute haben es durchsucht

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

Verbesserung der Leistung beim Array-Kopieren in C

Bei dem Versuch, die Effizienz beim Kopieren mehrerer Arrays in ein einziges dreidimensionales Array zu verbessern, stieß ein Entwickler auf Leistungsprobleme, als Führen Sie den folgenden Code aus:

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];
    }                    
}
Nach dem Login kopieren

Schnellere Lösung mit Buffer.BlockCopy

Um das zu beheben Aus Leistungsgründen wurde Buffer.BlockCopy als schnellere Alternative eingeführt. Ihr Hauptzweck besteht darin, Hochgeschwindigkeitsoperationen zu ermöglichen, wie in der Dokumentation angegeben:

Diese Klasse bietet eine bessere Leistung für die Bearbeitung primitiver Typen als ähnliche Methoden in der System.Array-Klasse.

Puffer. BlockCopy kann mit mehrdimensionalen Arrays arbeiten. Um eine optimale Leistung zu gewährleisten, ist es wichtig, die Anzahl der zu kopierenden Bytes und nicht die Anzahl der Elemente anzugeben und mit primitiven Arrays zu arbeiten.

Methode zum Kombinieren von Arrays zu einem 3D-Array

Als Antwort Auf die aktualisierte Frage, die darauf abzielte, drei 1D-Arrays zu einem 3D-Array zu kombinieren, könnte die folgende Magie sein angewendet:

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};
Nach dem Login kopieren

Benchmarking-Vergleich

Um den optimalen Ansatz zu ermitteln, wurden Benchmarking-Tests mit drei Methoden durchgeführt: Array.Copy, Buffer.BlockCopy und Buffer.memcpyimpl. Die Ergebnisse zeigten, dass die Methoden sehr wettbewerbsfähig sind, wobei Buffer.memcpyimpl im Allgemeinen die schnellsten sind. Der Leistungsunterschied ist jedoch marginal, so dass es unnötig ist, sich zu sehr auf die Auswahl einer Methode gegenüber den anderen zu konzentrieren.

Das obige ist der detaillierte Inhalt vonWie kann Buffer.BlockCopy die Leistung beim Kopieren mehrerer Arrays in ein 3D-Array in C# verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage