【发布时间】:2013-11-13 10:39:07
【问题描述】:
尽管,我遍历了以下 NSSet,NSMutableArray,NSFastEnumeration 文档,但我无法为以下提到的场景找到令人满意的来源:
在这里,NSMutableArray、NSArray 和 NSSet 包含相同的 10000000 个对象。
for (NSString *strIn in MutableArray) //NSMutableArray
{
// same Implementation
}
NSLog(@"Time for Mutable Array %d Iteration : %f",ObjectCount,[[NSDate date]timeIntervalSinceDate:startDate]);
startDate = [NSDate date];
for (NSString *strIn in array) //NSArray
{
// same Implementation
}
NSLog(@"Time for NSArray %d Iteration : %f",ObjectCount,[[NSDate date]timeIntervalSinceDate:startDate]);
startDate = [NSDate date];
for (NSString *strIn in Set) //NSSet
{
// same Implementation
}
NSLog(@"Time for Set %d Iteration : %f",ObjectCount,[[NSDate date]timeIntervalSinceDate:startDate]);
输出如下:
NSMutableArray 10000000 迭代的时间:0.048785
NSArray 10000000 迭代的时间:0.390537
NSSet 10000000 迭代的时间:4.684203
为什么NSSet 和NSArray 迭代时间有如此大的差异。
请认真回答。
编辑: 我发现上述迭代时间背后的实际原因是因为数组和 Set 中的计数不相等。我已经发布了实际问题here。另外,我可以在这里发布相同的内容,但该页面似乎太无证性质,而且原因背后的原因也有所偏差。再次感谢大家的回复。
【问题讨论】:
-
非常有趣,只是为了验证您的测试过程,您是否尝试更改迭代顺序?通过这种方式,您可以确保其他应用程序导致的临时性能下降等外部因素不会影响您的结果。此外,最好实际迭代几次并使用平均时间值。
-
@lawicko:感谢您的评论。我已经改变了所有可能的 3 次迭代的顺序!方式,但大致保持不变。此外,只有频繁的重新执行才会将迭代时间变化到微观级别。
-
我希望这个集合会慢一些,但是两个数组值应该是相同的,因为它们的实现是相同的。你的方法显然有问题。
标签: ios objective-c macos nsarray nsset