Ist das Kopieren von Arrays in C# mit Buffer.BlockCopy schneller?
In C# gibt es mehrere Möglichkeiten, Arrays zu kopieren, jede mit unterschiedlicher Leistung . Eine gängige Methode ist das Schleifenkopieren, wie im bereitgestellten Codebeispiel mit langsamer Leistung zu sehen ist. Für eine schnellere Leistung kann jedoch Buffer.BlockCopy verwendet werden.
Buffer.BlockCopy zum Array-Kopieren
Buffer.BlockCopy wurde speziell für die effiziente Manipulation primitiver Typen entwickelt. Seine Hauptfunktion besteht darin, eine bestimmte Anzahl von Bytes von einer Quelle zu einem Ziel zu kopieren und so die Leistung zu optimieren. Im Gegensatz zu Methoden in Array, wie z. B. Array.Copy, die mit Elementen arbeiten, kopiert Buffer.BlockCopy Bytes direkt für maximale Geschwindigkeit.
Anwenden von Buffer.BlockCopy auf das Problem
Um Buffer.BlockCopy im bereitgestellten Code zu implementieren, können folgende Änderungen vorgenommen werden:
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)); }
Durch Kopieren primitiver Werte als Byteblöcke direkt nutzen, nutzt der Code die optimierten Speicherverarbeitungsfunktionen von Buffer.BlockCopy.
Erweiterte Option: System.Buffer.memcpyimpl
Für eine potenziell höhere Leistung sollten Sie Folgendes in Betracht ziehen Binden eines Delegaten an System.Buffer.memcpyimpl. Diese Methode stellt die Speicherkopierfunktion der untersten Ebene im .NET Framework bereit. Es erfordert jedoch Hinweise und bietet möglicherweise keine signifikanten zusätzlichen Geschwindigkeitsgewinne gegenüber Buffer.BlockCopy.
Benchmarking-Ergebnisse
Benchmark-Tests zeigen, dass Buffer.BlockCopy durchweg schneller als Array ist .Copy, während System.Buffer.memcpyimpl in einigen Fällen eine etwas höhere Leistung bietet. Allerdings ist der Geschwindigkeitsunterschied nicht wesentlich. Im Allgemeinen bietet Buffer.BlockCopy eine einfache und effektive Lösung für das schnelle Kopieren von Arrays.
Das obige ist der detaillierte Inhalt vonIst „Buffer.BlockCopy' schneller als andere Methoden zum Kopieren von Arrays in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!