作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究iOS 5项目,并且遇到了严重的性能问题,使我的应用程序始终降低到<10fps。时间分析工具已识别出对objc::DenseMap
的调用,这似乎与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
最佳答案
从性能分析中筛选出系统库,然后查看指示内容。您正在查看堆栈的错误端。
通常,您的代码是一个相对较薄的单板,以创建特定应用程序所需的任何方式将系统框架粘合在一起。像这样的性能问题通常表明您的应用实现在算法上不理想;也许您经常重新整理资料,也许在使用缓存时清空/填充收藏夹,等等。
关于iphone - iOS objc::DenseMap性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8042780/
最近我遇到了在 llvm 中广泛使用的 DenseMap 数据结构。我认为它是 std::map(?) 的某种优化版本。谁能帮助我了解它们之间的区别或相似之处? 最佳答案 llvm::DenseMap
我是一名优秀的程序员,十分优秀!