Я работаю над проектом для iOS 5 и столкнулся с серьезной проблемой производительности, из-за которой мое приложение постоянно снижается до <10fps. Средство профилирования времени идентифицировало вызов <code>objc::DenseMap, который, похоже, имеет отношение к системе retain / release / autorelease во время выполнения Objective-C. Этот вызов занимает огромную часть времени обработки, и мне было интересно, есть ли у кого-нибудь указатели для разрешения этого штрафа и / или способов избежать этой проблемы. Я подозреваю, что это как-то связано с NSMutableArrays, NSMutableSets и другими изменяемыми коллекциями, которые я использую для управления объектами по кадрам. Любой совет или понимание того, как это отследить и разрешить, будет очень признателен. Ниже приведено все, что выглядело важным или уместным:
Running Time Self Symbol Name
1426.0ms 7.2% 1426.0 objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*>, objc::DenseMapInfo<unsigned long> >::LookupBucketFor(objc_object* const&, std::pair<objc_object*, unsigned long>*&) const
817.0ms 4.1% 0.0 objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*>, objc::DenseMapInfo<unsigned long> >::FindAndConstruct(objc_object* const&)
817.0ms 4.1% 0.0 _objc_rootRetain
817.0ms 4.1% 0.0 -[NSObject retain]
773.0ms 3.9% 0.0 objc_retain
28.0ms 0.1% 0.0 -[NSMutableArray removeObject:]
11.0ms 0.0% 0.0 CFRetain
580.0ms 2.9% 0.0 objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*>, objc::DenseMapInfo<unsigned long> >::find(objc_object* const&)
580.0ms 2.9% 0.0 _objc_rootReleaseWasZero
580.0ms 2.9% 0.0 _objc_rootRelease
562.0ms 2.8% 0.0 objc_release
1.0ms 0.0% 0.0 CFRelease
19.0ms 0.0% 0.0 objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*>, objc::DenseMapInfo<unsigned long> >::grow(unsigned int)
19.0ms 0.0% 0.0 objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*>, objc::DenseMapInfo<unsigned long> >::InsertIntoBucket(objc_object* const&, unsigned long const&, std::pair<objc_object*, unsigned long>*)
19.0ms 0.0% 0.0 objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*>, objc::DenseMapInfo<unsigned long> >::FindAndConstruct(objc_object* const&)
19.0ms 0.0% 0.0 _objc_rootRetain
19.0ms 0.0% 0.0 -[NSObject retain]
15.0ms 0.0% 0.0 objc_retain
4.0ms 0.0% 0.0 -[NSMutableArray removeObject:]
5.0ms 0.0% 0.0 _objc_rootRetain
5.0ms 0.0% 0.0 -[NSObject retain]
4.0ms 0.0% 0.0 objc_retain
3.0ms 0.0% 0.0 objc_retainAutoreleasedReturnValue
1.0ms 0.0% 0.0 -[NSMutableArray removeObject:]
3.0ms 0.0% 0.0 _objc_rootReleaseWasZero
3.0ms 0.0% 0.0 _objc_rootRelease
3.0ms 0.0% 0.0 objc_release
2.0ms 0.0% 0.0 objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*>, objc::DenseMapInfo<unsigned long> >::erase(objc_object* const&)
2.0ms 0.0% 0.0 objc_clear_deallocating
2.0ms 0.0% 0.0 objc_destructInstance
2.0ms 0.0% 0.0 CFRelease