我想說明一個具體的例子,以瞭解在Objective-C中重寫java代碼時是否存在最佳(和最差)實踐。移植到Objective-C的Java代碼非常慢
我已將OSE org.apache.wicket.util.diff.myers的Java實現移植到OSX Snow Leopard(Xcode 4)上的Objective-C,但結果與Java版本相比運行速度非常慢。
的方法,與最壞的性能是構建路徑,它主要做
- 稀疏數組訪問(對角線變量,此陣列被分配內的方法和不返回) 隨機
- 數組訪問(原稿和rev變量)
- 分配PathNode的及其子類(具有三個屬性的對象,只有屬性是內部使用由數組的元素)
- 串比較
可可還沒有任何集合類,所以我分配使用malloc數組與稀疏數組輕鬆地工作,這大大提高了基於NSDictionary中和分配的NSNumber的對象數不勝數的第一個版本中使用的關鍵。
(多個)分配使用正常語法[[MyClass alloc] init]
完成,因爲被添加到一個NSMutableArray(但它添加到陣列後立即釋放)
到陣列隨機存取完成它們不會自動釋放的PathNode使用[NSArray objectAtIndex:index]我認爲(但我可能是錯的),將它移動到類似C不會加速。
你有什麼想法來提高性能,哪裏可以找到瓶頸? 使用儀器74%的時間花在分配上,我該如何改進分配?
編輯我已提交實際實施github,顯然是一個alpha版本沒有準備好生產,不使用任何有效的Objective-C構建
嘗試按照本文所述使用「堆棧對象」:http://mikeash.com/pyblog/friday-qa-2010-01-15-stack-and-heap-objects-in-objective-c。 html 它們非常有限,但是如果您需要buildPath例程中的數據,只有這樣才能減少分配時間。 – viggio24
感謝「堆棧對象」幫助我刪除malloc/free,但主代碼依賴(並返回)一個包含數組的對象,它們被分配到循環中。我已經提煉了我的問題 – dafi