更快的循环方法('for'和'foreach')?

Nic*_*ndo 2 c# loops

这个问题源于我在foreach循环上问我最后一个问题的原因.我有一个大字符串数组(比如成千上万),我想迭代数组,并且能够根据某个条件突破,我需要最佳性能.

一些示例代码:

for(int i = 0; i < array.length && flag == true; i++){
    //Processing and set flag
}

//..or

foreach(string item in array){
    //processing...set flag
    if(!flag)
        break;
}
Run Code Online (Sandbox Code Playgroud)

哪种方式会更便宜?

Dan*_*Tao 5

你总能对它们进行基准测试 使用Stopwatch并迭代,例如,一千万次迭代,看看哪个更快.

我认为你会发现,两者几乎完全相同,因为JIT编译器优化foreach了一个数组,基本上是a for.

flevine100实际上是正确的,在一般的一个for稍微比更有效的foreach:该类型的GetEnumerator方法实现创建一个新的对象IEnumeratorIEnumerator<T>(由于存储器分配和方法调用开销); 这是不太大多数的收藏品的情况下System.Collections.Generic,然而,由于其明确要IEnumerable使用的值类型枚举实现(更不用提foreach结构实际上并不需要IEnumerable摆在首位实现).

它甚至更少具体地说,因为它们是固定大小的,并因此由琐碎JIT编译器以优化阵列的情况.