【发布时间】:2010-11-01 16:41:36
【问题描述】:
我很失望地发现 Array.Clone、Array.CopyTo 和 Array.Copy 都可以通过一个简单的 3 行手动编码的 for(;;) 循环来击败:
for(int i = 0; i < array.Length; i++)
{
retval[i] = array[i];
}
假设对某个预定大小的数组执行几百万次操作的基本情况需要 10 秒。
在每次操作之前使用 Array.Clone 将该时间延长到 100 秒非常糟糕。
使用 Array.CopyTo 和 Array.Copy 只需要大约 45 秒。
上面的循环只需要大约 20 秒。
(忘记这是否对现实世界产生影响的主观论点,因为在现实世界中,编写一个 3 行 for(;;) 循环可以说与查找 Array 的文档一样简单类。)
我只是想知道为什么性能如此不同。在好的旧 C 语言中,最简单的库函数 memcpy() 的执行与上面的手动 for(;;) 循环大致相同,我想知道 .NET 中是否还有其他一些数组复制函数是这样实现的一个很好的简单 for(;;) 没有任何抽象阻碍 Array.Clone、Array.CopyTo 和 Array.Copy。
【问题讨论】:
-
您是否考虑进行任何分配?
-
您是在调试版本还是发布版本中进行测试?
-
我在stackoverflow.com/questions/1279407/… 的问题是相关的。但是,我看到
Array.Copy对于超过 100 个元素的数组更快。
标签: .net arrays copy performance