![]() |
1
4
包括分配我得到以下结果:
代码如下:
|
![]() |
2
2
数组方法不也必须创建和分配输出数组对象吗? |
![]() |
3
1
你的测试可能有点起皱。快速查看 Reflector 显示数组。copy使用外部实现(array.copyto最终使用相同的调用):
这就打开了内存复制和逐项复制的可能性。我自己在释放模式下的测试,随机填充一个int[1000000],循环时钟为468750个滴答,数组为312500个滴答。虽然差别不大,但速度还是比 weiqure 注意。 您可能需要调整测试以确保没有其他因素影响结果。 This post 对对象数组进行类似的观察。 |
![]() |
4
0
可能和拳击有关吗? |
![]() |
5
0
你没有提到被复制的数组有多大。也许jit没有像对泛型类型那样,为每种类型的数组专门化array.copy和array.clone。因此,这些方法首先要做的是检查数组以确定:它是引用类型还是值类型,如果是值类型,则每个条目有多大? 如果我是对的,复制一个小数组1000万次将导致这些检查不必要地重复1000万次。另一方面,复制一百万元素数组可能比手工编码的循环快,因为array.copy可能对大型数组采用优化。值得注意的是,在你的手工编码循环中
jit将优化array[i]的范围检查,因为它识别出i始终在范围内;但是它可能不会删除retval[i]的范围检查,即使它也很容易被证明在范围内。由于它可能是用本机代码编写的,array.copy可以避免这些检查。除此之外,array.copy可能使用循环展开,对于大字节数组,可能一次复制一个机器字。 但我只是在猜测。我不知道怎么知道数组是什么样的,拷贝就是这样。 |
![]() |
6
0
我想指出的是
换句话说,
而copy和copy等方法只是将元素复制到现有数组中。因此,预计array.clone需要花费很多时间,比其他的要长得多,因为内存不可用。 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |
![]() |
Geremia · 2D NumPy数组+1D数组? 6 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 7 月前 |
![]() |
Paul Williams · 迭代数组时输出有问题 7 月前 |