oru*_*awa 7 c# iteration performance
通过数组(或列表,linkedList,Dictionary ect)的迭代速度是否取决于数据类型?
示例:一个10个bools v/s的数组,一个10个整数的数组?
是的,数据类型很重要。它与迭代无关;它与数据类型有关。
值类型
An 的int
长度为 4 个字节。A 的decimal
长度为 16 个字节。所以 adecimal
比 an 大 4 倍int
。每次从数组中检索一个值时,都会复制该值。如果是decimal
al,则复制 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)
选角也需要额外的时间。
编辑
一些时间测量来支持我的主张: