Clone() und ToArray() sind syntaktisch nett, weil Sie brauchen, um eine Ziel-Array nicht vorbelegt, aber in Bezug auf Leistung, Array.Copy() ist die schnellste Methode (Einschränkung siehe unten).
Der Grund dafür, dass Array.Copy() so schnell ist, ist, dass es keinen Speicher reserviert. Wenn Ihre Arrays jedoch jedes Mal in eine neue Speicherregion kopiert werden müssen, ist Array.Copy() nicht mehr die schnellste Methode.
Hier sind meine Leistung Ergebnisse:
Copy: 0 ms
Copy (with allocation): 449 ms
Clone: 323 ms
ToArray: 344 ms
Und hier ist der Code, den ich verwendet:
const int arrayLength = 100000;
const int numberCopies = 1000;
var a = new int[arrayLength];
var b = new int[arrayLength];
var stopwatch = new Stopwatch();
for (var i = 0; i < numberCopies; i++) {
Array.Copy(a, b, arrayLength);
}
Console.WriteLine($"Copy: {stopwatch.ElapsedMilliseconds} ms");
stopwatch.Restart();
for (var i = 0; i < numberCopies; i++) {
var c = new int[arrayLength];
Array.Copy(a, c, arrayLength);
}
Console.WriteLine($"Copy (with allocation): {stopwatch.ElapsedMilliseconds} ms");
stopwatch.Restart();
for (var i = 0; i < numberCopies; i++) {
b = (int[]) a.Clone();
}
Console.WriteLine($"Clone: {stopwatch.ElapsedMilliseconds} ms");
stopwatch.Restart();
for (var i = 0; i < numberCopies; i++) {
b = a.ToArray();
}
Console.WriteLine($"ToArray: {stopwatch.ElapsedMilliseconds} ms");
Könnten Sie nicht nur verwenden 'Array.Copy'? –
sollte eine Möglichkeit sein, den gesamten Speicher direkt zu kopieren ... in C++ http://stackoverflow.com/questions/3902215/using-memcpy-to-copy-a-range-of-elements-from-an-array –
http: // Stapelüberlauf.com/questions/5655553/whats-the-most-effiziente-Weg-zu-kopieren-Elemente-von-ac-sharp-multidimensional-arr –