迭代速度和数据类型

oru*_*awa 7 c# iteration performance

通过数组(或列表,linkedList,Dictionary ect)的迭代速度是否取决于数据类型?

示例:一个10个bools v/s的数组,一个10个整数的数组?

Mar*_*der 2

是的,数据类型很重要。它与迭代无关;它与数据类型有关。

值类型

An 的int长度为 4 个字节。A 的decimal长度为 16 个字节。所以 adecimal比 an 大 4 倍int。每次从数组中检索一个值时,都会复制该值。如果是decimalal,则复制 16 个字节。(如果是引用类型,则复制引用,通常为 4 或 8 个字节)。复制更多字节只会减慢迭代速度。

拳击

如果您遍历集合,则也有可能更改类型。例如:

foreach(object o in new int[] { 1,2,3 })
     ....
Run Code Online (Sandbox Code Playgroud)

这会将每个框框int到一个object. 这需要时间。这与迭代无关,它与你正在拳击这一事实有关。

铸件

最后一个例子:还有一些数组需要转换:

foreach(Person p in new object[] { ... })
     ....
Run Code Online (Sandbox Code Playgroud)

选角也需要额外的时间。

编辑

一些时间测量来支持我的主张:

时间以毫秒为单位。 数组的大小为 10,000。 迭代次数也是 10,000 次。