的clone()和ToArray的()在語法上是不錯的,因爲你並不需要預先分配目的數組,但在性能方面,Array.Copy()是最快的方法(見下文警告)。
Array.Copy()如此之快的原因是它沒有分配任何內存。但是,如果您需要將陣列每次都複製到新的內存區域,那麼Array.Copy()不再是最快的方法。
這裏是我的性能測試結果:
Copy: 0 ms
Copy (with allocation): 449 ms
Clone: 323 ms
ToArray: 344 ms
這裏是我使用的代碼:
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");
不能你只需要使用'Array.Copy'? – 2012-03-29 00:04:16
應該是一種直接複製所有內存的方法...在C++中http://stackoverflow.com/questions/3902215/using-memcpy-to-copy-a-range-of-elements-from-an-array – 2012-03-29 00:05:14
HTTP://計算器。COM /問題/ 5655553 /什麼最最有效的路到副本元素-的-AC鋒利多維-ARR – 2012-03-29 00:08:11