在滚动时将部分插入到UICollectionView时的性能问题

基本上我使用默认的UICollectionViewFlowLayout 。 当我使用insertSections它需要一些时间。 特别是如果用户滚动这会带来一些口吃。 我正在使用自动布局,在我的自定义UICollectionViewCell上定位标签。 我正在出列单元格和补充视图(标题)。 这里没什么特别的

以下是时间分析器的截图:

UICollectionViewFlowLayout prepareLayout

你可以在这里看到的是, prepareLayoutUICollectionViewFlowLayout消耗了三分之一的可用CPU功率。 有没有可能加速呢? 例如,为layoutAttributesForElementsInRect:layoutAttributesForItemAtIndexPath:collectionViewContentSizeprepareLayout编写自定义方法? 这个方法怎么样?

我做的其他观察:

更多的部分添加更长的performBatchUpdates插入部分(约420项)。 每次添加相同数量的项目。 我用仪器做了一些testing。 当发生口吃时,CPU使用率超过100%。 真正的内存使用量正在增加,但我结束了约60 MB的testing。 当时大约有48000个细胞被加载到数据集中(大约45个始终在屏幕上)。 一旦这些单元格被加载,滚动工作就能stream利地进行(CPU最多100%,但只有很短的时间,用户不会注意到)。 在另一个testing中,总共分配的字节大约是1.6GB,但是持续的低。 如果插入了新的部分,框架也会下降到0。

我试图离开单元格的自动布局,为单元格使用不透明的背景颜色,使用剪辑来限制单元格,使用shouldRasterize等等。 单元格不重叠,不应使用小数值(舍入宽度)。 我根本不使用阴影。 我也试图评论事情,看看有什么错,但我认为这一定是必不可less的。 我在模拟器以及不同的设备上进行了testing。

有谁有线索如何提高插入部分时的性能?

图片附件的调用树中有不less未解决的符号。 您可以尝试在仅由MonthView应用程序组成的调用树函数之一中缩小性能问题。

尝试检查Hide System Libraries并使用Debug作为生成configuration,所以你可以观察这些符号,并导航到您的应用程序中的特定代码。

一旦清楚您的集合视图数据源或委托对UICollectionView框架级别的性能问题没有贡献,那么您可以花费精力find一种最小化收集视图部分更新的方法。

也许你的单元格自动布局configuration是相当复杂的,你可以简化它?

虽然如果不真正查看collections视图单元格的内容,很难理解。