2012-10-21 35 views
5

我在寻找一些关于如何使用仪器的时间分析仪来增强特定操作的建议。我有一个分页滚动视图,按需加载其内容。当一个新页面滚动到另一个页面时,会在右侧加载两页。当当前页面滚动屏幕的50%时会发生这种情况,而在较慢的设备上,加载足够的瓶颈会中断滚动的平滑度。卷轴感觉就像在50%的品脱中暂停一下,然后跳回到行动。使用仪器的基准测试性能

我应该注意到,我的应用程序中没有网络组件,所以瓶颈不在数据被提取时 - 这一切都在加载新视图。

当我在改进这个工作时,我需要对转换进行基准测试,以便评估我的增强效果。观看了WWDC会议后,我了解了时间分析器的基础知识,但我并不确定自己正在寻找正确的事情。

我运行仪器,然后执行滚动。我看到CPU活动的预期高峰。然后我选择尖峰并查看符号名称。正如你在下面看到的,当我隐藏系统库并显示Obj-C时,我正在处理一个短暂的90%的尖峰,运行时间为81.0毫秒。

enter image description here

我的困惑是当我深入到我的代码。我发现其中一个最大的贡献者(23毫秒)是一个小例程,只使用sortedArrayUsingDescriptors。关于那个我可以做的不多。其他时候,根本原因是我会使用CGRectInset - 几毫秒。我想我期望看到更多与图像使用或类似的东西有关。

我猜我不知道我是否对标准做正确的事情。我是否真的试图将我的6ms操作减少到5ms,并希望看到有所不同?我正在寻找合适的工具来诊断我的问题吗?

任何提示或指示什么衡量和在哪里集中我的努力将真正重视。

+0

如果数组排序花费时间,那么您应该集中精力。你为什么要对数组进行排序呢?它可以预先排序吗?它是否必须是一个数组? – jrturton

+1

就您的乐器使用而言,它看起来像是在做正确的事情。该方法和cellForRowAtIndexPath似乎是你大部分时间都要去的地方。双击以显示源代码中的实际热点。 – jrturton

+0

谢谢你的采访。我有一组核心数据类和一组项目。为了方便,我为该类添加了orderedItems方法。例如,当我需要单元格的文本时,我使用orderedItems来查找正确的项目。也许我可以在课堂上缓存几毫秒,并在项目更改时以某种方式更新它。 –

回答

1

考虑使用宏中央调度尽可能多地在后台线程上执行尽可能多的非UI工作(读取,排序,选择等)。这将利用多CPU机器的强大功能,并让您更快地脱离主线程。只有使用主线程才能根据需要工作。