的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