使用Array.CopyTo复制元素还是应该始终使用for循环是否正确?

时间:2010-06-11 20:18:44

标签: c# .net arrays optimization

写起来更容易

intArray1.CopyTo( intArray2, 0 )

比for-loop等效,但System.Array不提供任何通用的Copy / CopyTo方法。

编写for循环是否更好?或者正在使用Copy / CopyTo编译或JIT有效吗?

3 个答案:

答案 0 :(得分:2)

在大多数情况下,

Array.Copy/CopyTo的执行速度比手动循环要快,因为它可以直接进行内存复制。

如果您没有大型阵列或速度不是问题,请使用代码中最适合您需要复制项目的内容。

答案 1 :(得分:1)

如果您正在复制一个原始类型数组,您可以使用BufferBlockCopy方法自行编写内存复制技术。

    int[] CopyArray(int[] A, int index)
    {
        const int INT_SIZE = 4;
        int length = A.Length - index;
        int[] B = new int[A.Length - index];
        Buffer.BlockCopy(A, index * INT_SIZE, B,
                         0 * INT_SIZE, length * INT_SIZE); 
        return B;
    }

此方法是复制基元数组的最有效方式。 (它只适用于原语)

答案 2 :(得分:0)

我说如果您知道要将第一个数组的全部内容复制到第二个数组而不更改值或对副本执行任何特定处理,请使用Array.CopyTo

这有一些限制。数组必须只有一个维度,因为我记得它。此外,如果阵列非常大,你可能会遇到与copyto有关的一些与速度相关的问题,但我想这只会与非常大的数组一起发挥作用。所以,我会尝试并测试它,但你的里程可能会有所不同。