性能明智,在相对较大的阵列上(到目前为止,原始阵列的通常计数为±20000),哪种方法最适合于过滤?块或谓词?NSArray过滤:在这种情况下使用谓词,哪种情况下使用块?
包含对象的大多数ivars是字符串,我想查询这些。
性能明智,在相对较大的阵列上(到目前为止,原始阵列的通常计数为±20000),哪种方法最适合于过滤?块或谓词?NSArray过滤:在这种情况下使用谓词,哪种情况下使用块?
包含对象的大多数ivars是字符串,我想查询这些。
有一个办法,阻止可能会更快:
NSEnumerationConcurrent
枚举阵列。然而,文档没有明确说,为了将被保留。我认为这是不错的选择。如果数组的顺序很重要,则必须重新排序(如果甚至可能的话),并且在任何时间比较中都必须包含该顺序。
其他方法是非同时枚举使用块和筛选使用谓词。 filterUsingPredicate:
可能会更快,因为NSArray将有机会使用内部知识来构建结果数组,比重复的消息更快。但这只是一种可能性;唯一可以肯定知道的方法是比较,即使如此,答案可能会随时发生变化(包括在同一过程中,对于不同的输入数组或不同的对象)。
我的建议是直接使用谓词实现它 - 首先使用谓词,然后使用Instruments来查看它是否是性能问题。如果不是,则清除代码获胜。如果这是性能问题,请尝试并发枚举。
在谈论性能时很难打败一个实验。我们可以争论一整天关于块或所用解决方案的各种性能影响,但最好是当您测量应用程序中使用的实际数据时。
谢谢,我实现了这两个,我会看到它的行为取决于查询的复杂性。现在和一个简单的查询,我会看到它随着时间的推移如何演变。 – jibay 2011-02-07 16:51:36
谢谢,你正在写...而且代码少维护=少痛:) – jibay 2011-02-07 16:52:15