我尝试了以下三个for
循环:
#define loop 1000000000
NSDate *start;
NSDate *end;
// 1: empty for loop
start = [NSDate date];
for (NSInteger i = 0; i < loop; i++) {
}
end = [NSDate date];
NSLog(@"time interval: %f", [end timeIntervalSince1970] - [start timeIntervalSince1970]);
// 2: do-while for loop
start = [NSDate date];
for (NSInteger i = 0; i < loop; i++) {
do {
} while (0);
}
end = [NSDate date];
NSLog(@"time interval: %f", [end timeIntervalSince1970] - [start timeIntervalSince1970]);
// 3: @try-@finally for loop
start = [NSDate date];
for (NSInteger i = 0; i < loop; i++) {
@try {
}
@finally {
}
}
end = [NSDate date];
NSLog(@"time interval: %f", [end timeIntervalSince1970] - [start timeIntervalSince1970]);
我在我的'07年Macbook Pro上测试了这三个for
循环约10亿次。我记录了时间戳以计算执行时间。以下是结果:
1: empty for loop => 2.947088 sec
2: do-while for loop => 2.581905 sec
3: @try-@finally for loop => 4.216685 sec
什么?do-while循环比空的for循环更快!
为什么?
更新
我在for循环中添加了一些额外的代码(j++):
NSInteger j;
#define loop 1000000000
// 1: empty for loop
j = 0
for (NSInteger i = 0; i < loop; i++) {
j++;
}
// 2: do-while for loop
j = 0;
for (NSInteger i = 0; i < loop; i++) {
do {
j++;
} while (0);
}
// 3: @try-@finally for loop
j = 0;
for (NSInteger i = 0; i < loop; i++) {
@try {
j++;
}
@finally {
}
}
输出:
1: empty for loop => 2.590103 sec
2: do-while for loop => 2.138528 sec
3: @try-@finally for loop => 3.983589 sec
这三个代码比之前快得多,而do-while循环的for语句仍然是最快的。奇怪!
long
类型(typedef long NSInteger;
)。 - Xaree Lee