• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - CollapseLayers = true 时 iOS 中的核心绘图性能

[复制链接]
菜鸟教程小白 发表于 2022-12-12 19:09:13 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在我的 iOS 应用程序中,我使用 UIScrollView 和 UIPageControl 来显示三个不同时间段的 CPTXYGraph 图,即一个显示过去 30 天的数据,下一个显示过去 90 天的数据,第三个显示过去六个月的数据。

即上个月 enter image description here

最后 90 enter image description here

UIScrollView 和 UIPageControll 的组合允许我加载每个图表,然后让用户在图表之间滑动以查看不同的时间段。

在我尝试使我的应用程序成为通用应用程序并尝试在 iPad 上运行之前,一切都运行良好。当我旋转 iPad 时,应用程序会崩溃并导致 iPad 进行软重置。当连接到调试器时,iPad 会在崩溃前报告内存不足警告。

我发现在 CPTGraphHostingView 上设置 CollapseLayers = true 然后我可以在 iPad 上运行该应用程序而不会崩溃,但是在其他页面上加载额外的图表比我在 iPhone 上执行的速度要慢几个数量级。当然,我使用的是 iPhone 5s 和 iPad3,但我没想到会像我看到的那样显着放缓。

困惑的是,我在仍然设置 CollapseLayers = true 的情况下将应用程序重新加载到 iPhone 上,并注意到 iPhone 在加载水平图时也明显减慢了速度。请参阅下面的 Instruments 捕获

首先使用 CollapseLayers = false enter image description here

其次是 CollapseLayers = true enter image description here

在每次捕获中,我都在 iPhone 上做相同数量的“工作”,启动应用程序并旋转。请注意,当 CollapseLayers = true 时,CPU 在 100% 时花费的时间明显长于 CollapseLayers = false 时,但内存使用量要少得多,大约为 38MB 和 199MB。

关于如何减少内存使用量以便不需要设置 CollapseLayers = true 或如何通过 CollapseLayers = true 提高性能的建议?

更新

我找到了一个讨论这个主题的讨论:

https://groups.google.com/forum/m/#!topic/coreplot-discuss/LqMJEPyuR1o

来自帖子

渲染速度受 CPU 限制,因此不幸的是,更高的分辨率需要 4 倍的工作量,这与您所看到的差不多。

这至少解释了为什么我看到 iPad3 与 iPhone 相比性能如此出色。

尝试从我的图表中删除主题并保留 CollapseLayers = false,遗憾的是这仍然会使 iPad 崩溃。



Best Answer-推荐答案


设置 collapsesLayers = YES 告诉 Core Plot 将整个图形绘制到单个 Core Animation 层中,而不是为所有各种元素(轴、绘图)使用单独的层、标签等)。这减少了内存使用,但如果有任何变化,则强制整个图形重绘,而不是仅仅重绘发生变化的部分。确保图表在创建后没有多次重绘。请记住,对图表的任何更改或托管 View 将强制它在显示后重新绘制。

关于ios - CollapseLayers = true 时 iOS 中的核心绘图性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923675/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap