c# For循环,While循环,LastIndexOf, IndexOf,为什么后两个更快

本文关键字:循环 两个 为什么 While For LastIndexOf IndexOf | 更新日期: 2023-09-27 18:11:13

我已经在c#中做了一些性能测试,使用For循环和While循环对ArrayList进行比较搜索。

时间消耗似乎是二次的。

但是,如果我使用LastIndexOfIndexOf来搜索列表,它将获得"比预期更快"的速度。

有人知道原因吗?

c# For循环,While循环,LastIndexOf, IndexOf,为什么后两个更快

我不懂任何 c#,但我可以提出可能的答案。

任何编程语言的方法通常都是利用处理器提供的快捷方式来编写的,而你自己编写的代码则不会(例如,你必须声明必须保存在堆栈上的局部变量,需要更慢的查找时间,而不仅仅是一个临时的寄存器变量)。因此,语言本身所做的任何事情通常都会比你自己的代码更快。

使用ILSpy并查看LastIndexOf/IndexOf方法的内部结构。这就是为什么它们更快的答案。

我有一种预感,List内部使用b树或其他树,查找log(n)。您使用for/foreach所做的是执行带有一些额外开销的线性查找。如果你还记得数学课,那么你就会知道log(n)比线性线更平坦,因此查找速度更快…