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]; } }
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.
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};
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!