Heim > Backend-Entwicklung > C++ > Ist „Buffer.BlockCopy' schneller als andere Methoden zum Kopieren von Arrays in C#?

Ist „Buffer.BlockCopy' schneller als andere Methoden zum Kopieren von Arrays in C#?

Barbara Streisand
Freigeben: 2024-12-29 17:07:14
Original
154 Leute haben es durchsucht

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

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

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!

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