性能明智,在相對較大的陣列上(到目前爲止,原始陣列的通常計數爲±20000),哪種方法最適合於過濾?塊或謂詞?NSArray過濾:在這種情況下使用謂詞,哪種情況下使用塊?
包含對象的大多數ivars是字符串,我想查詢這些。
性能明智,在相對較大的陣列上(到目前爲止,原始陣列的通常計數爲±20000),哪種方法最適合於過濾?塊或謂詞?NSArray過濾:在這種情況下使用謂詞,哪種情況下使用塊?
包含對象的大多數ivars是字符串,我想查詢這些。
有一個辦法,阻止可能會更快:
NSEnumerationConcurrent
枚舉陣列。然而,文檔沒有明確說,爲了將被保留。我認爲這是不錯的選擇。如果數組的順序很重要,則必須重新排序(如果甚至可能的話),並且在任何時間比較中都必須包含該順序。
其他方法是非同時枚舉使用塊和篩選使用謂詞。 filterUsingPredicate:
可能會更快,因爲NSArray將有機會使用內部知識來構建結果數組,比重複的消息更快。但這只是一種可能性;唯一可以肯定知道的方法是比較,即使如此,答案可能會隨時發生變化(包括在同一過程中,對於不同的輸入數組或不同的對象)。
我的建議是直接使用謂詞實現它 - 首先使用謂詞,然後使用Instruments來查看它是否是性能問題。如果不是,則清除代碼獲勝。如果這是性能問題,請嘗試併發枚舉。
在談論性能時很難打敗一個實驗。我們可以爭論一整天關於塊或所用解決方案的各種性能影響,但最好是當您測量應用程序中使用的實際數據時。
謝謝,我實現了這兩個,我會看到它的行爲取決於查詢的複雜性。現在和一個簡單的查詢,我會看到它隨着時間的推移如何演變。 – jibay 2011-02-07 16:51:36
謝謝,你正在寫...而且代碼少維護=少痛:) – jibay 2011-02-07 16:52:15