You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UICollectionView重新应用大数据量快照耗时过长的优化咨询

UICollectionView横竖屏切换快照优化问题

我维护的UICollectionView包含30000+条数据,屏幕横竖屏切换时数据源会发生变化,因此每次旋转都需要重新创建并应用新的快照。

实际运行中发现,首次加载单元格时速度尚可,但横竖屏切换后重新应用新快照的耗时极长——核心原因是重载时需要计算新旧快照的差异,消耗了大量资源。

我想知道:

  • 是否存在无需计算差异即可应用快照的方法?(由于快照体积大,不想在内存中保留两份快照)
  • 先应用空快照再应用完整快照是否是可行的解决方案?

补充测试数据

我做了两组粗略测试,结果如下:

应用空快照的情况

首次加载

2022-08-05 07:47:11.666847+1000 before apply
2022-08-05 07:47:11.667139+1000 after apply empty snapshot
2022-08-05 07:47:11.788821+1000 after creating full-sized snapshot
2022-08-05 07:47:13.022973+1000 after applying full-sized snapshot

总耗时:~1.36秒

旋转后重载

2022-08-05 07:48:05.238174+1000 before apply
2022-08-05 07:48:08.708084+1000 after apply empty snapshot
2022-08-05 07:48:08.900322+1000 after creating full-sized snapshot
2022-08-05 07:48:12.034542+1000 after applying full-sized snapshot

总耗时:~6.80秒

不应用空快照的情况

首次加载

2022-08-05 07:49:33.149233+1000 Setting columns…
2022-08-05 07:49:33.279147+1000 before apply
2022-08-05 07:49:33.401114+1000 after creating full-sized snapshot
2022-08-05 07:49:34.402645+1000 after applying full-sized snapshot

总耗时:~1.25秒

旋转后重载

2022-08-05 07:50:26.829309+1000 Reload due to trait collection change…
2022-08-05 07:50:27.270996+1000 Setting columns…
2022-08-05 07:50:31.187630+1000 before apply
2022-08-05 07:50:31.410154+1000 after creating full-sized snapshot
2022-08-05 07:50:45.879088+1000 after applying full-sized snapshot

总耗时:~19.05秒


测试结论

  • 首次加载:不使用空快照的速度更快(1.25秒 vs 1.36秒)
  • 横竖屏切换后重载:先应用空快照再应用完整快照的耗时远低于直接应用完整快照,核心是节省了新旧完整快照的差异计算时间

当前疑问

是否存在比「先空快照再完整快照」更高效的优化方案?如果没有,我可能需要回退到旧的UICollectionViewDataSource方式实现数据源供给。


内容的提问来源于stack exchange,提问作者Heuristic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:45:28