我有一个应用程序可以在 3 个联系人和 1 个组中导入大约 12000 个号码。从 iOS 6 开始,这个过程需要的时间是 iOS 5.1 之前的 5 倍。在模拟器中它不像在设备上那么慢。
我尝试了一些分析,发现主要时间由 ABAddressBookSave 使用,执行时间为 28%。我也感觉到地址簿的一切都比以前慢了。在 iOS 5 上,它大约占总执行时间的 3%。内存和CPU没问题。
有没有人遇到过类似的问题,有没有人发现为什么会发生这种情况或找到解决方案来解决它?
这是一个堆栈跟踪。为什么 iOS 6 这么慢?
运行时间自身符号名称 3212.0ms 41.6% 0,0 ABAddressBookSave
3212.0ms 41.6% 0,0 ABCSave
3212.0ms 41.6% 0,0 ABCAddressBookSaveWithConflictPolicy
3198.0ms 41.4% 0,0 CPRecordStoreSaveWithPreAndPostCallbacksAndTransactionType
3134.0ms 40.6% 0,0 CFDictionaryApplyFunction
3134.0ms 40.6% 0,0 CFBasicHashApply
3134.0ms 40.6% 0,0 __CFDictionaryApplyFunction_block_invoke_0
3134.0ms 40.6% 0,0 CPRecordStoreUpdateRecord
2971.0ms 38.5% 0,0 _didSave
2971.0ms 38.5% 0,0 ABCDContextUpdateSearchIndexForPersonAndProperties
2773.0ms 35.9% 0,0 CPSqliteStatementPerform
2773.0ms 35.9% 0,0 sqlite3_step
2773.0ms 35.9% 0,0 sqlite3VdbeExec
2772.0ms 35.9% 0,0 fts3UpdateMethod
2765.0ms 35.8% 0,0 fts3PendingTermsAdd
2734.0ms 35.4% 0,0 ABCFFTSTokenizerOpen
2734.0ms 35.4% 0,0 ABTokenListPopulateFromString
2631.0ms 34.1% 1,0 CFStringGetBytes
2630.0ms 34.1% 2624,0 __CFStringEncodeByteStream
6.0ms 0.0% 0,0 CFStringEncodingIsValidEncoding
这里是 iOS 5 中的相同方法
运行时间自身符号名称
245.0ms 12.9% 0,0 ABAddressBookSave
245.0ms 12.9% 0,0 ABCSave
245.0ms 12.9% 0,0 ABCAddressBookSaveWithConflictPolicy
234.0ms 12.3% 0,0 CPRecordStoreSaveWithPreAndPostCallbacksAndTransactionType
167.0ms 8.8% 0,0 CFDictionaryApplyFunction
167.0ms 8.8% 0,0 CFBasicHashApply
167.0 毫秒 8.8% 0,0 __CFDictionaryApplyFunction_block_invoke_0
167.0ms 8.8% 0,0 CPRecordStoreUpdateRecord
162.0ms 8.5% 0,0 CFDictionaryApplyFunction
162.0ms 8.5% 0,0 CFBasicHashApply
162.0ms 8.5% 0,0 __CFDictionaryApplyFunction_block_invoke_0
162.0ms 8.5% 0,0 CPRecordStoreSaveProperty
158.0ms 8.3% 0,0 ABCMultiValueSave
158.0ms 8.3% 1,0 ABCDBContextSaveMultiValue
143.0ms 7.5% 0,0 CPSqliteConnectionAddRecord
143.0ms 7.5% 1,0 CPSqliteConnectionAddRecordWithRowid
85.0ms 4.5% 0,0 CPSqliteStatementPerform
16.0ms 0.8% 2,0 CFR释放