首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速主螺纹100%负载

快速主螺纹100%负载
EN

Stack Overflow用户
提问于 2020-03-31 14:26:03
回答 1查看 727关注 0票数 1

在iOS应用程序(Swift 5)中,我使用PDF。它从UIViews生成几个PDF。现在,在生成UIActivityViewController时,我呈现了一个工作良好的。该活动正在旋转并生成PDF。整个过程就像2-3秒长。在此期间,CPU是95-100%加载的,几乎所有的都是在主线程 (PDF是用户界面的东西)上使用的。

现在,我决定在生成PDF的同时添加一些小动画。它是一个JSON导出,从后效果,并正在应用程序实现的帮助下,洛蒂。这也是一个UI的事情,但没有空间来平稳地显示动画在屏幕上-它是滞后的(就像非常糟糕)。

为了解决这个问题,尝试了

  • 后台线程中做尽可能多的工作,
  • 使用异步和相同的QoS (不影响哪一个)(也使用标志强制QoS)调度
  • 使用具有低优先级的和QoS的线程代替DispatchQueue。

什么都帮不上忙。滞后仍然存在。

有人能帮忙吗?

也许其他一些解决方案会有所帮助--如果我想出一种方法来告诉这个代码块,它可以将它分派回主线程,但是使用不超过一定量的%。但我认为这是不可能的。

示例项目是这里。run的视频是这里

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-03-31 22:22:08

..。想出一种方法来告诉代码块,它可以分派回主线程,但不超过一定数量的%。但我认为这是不可能的。

是的,当您发送回主线程时,您不能限制%。

话虽如此,两种情况中的一种可能正在发生。要么(a)主线程只是忙于其他线程,要么(b)核心受到另一个线程的约束(要么所有内核都忙于做其他事情,后台工作的QoS设置得太高,或者更糟糕的是,您已经通过线程爆炸耗尽了工作线程)。

如果您在设备上分析您的应用程序,有两种可能有用的工具:

  • 首先是“系统跟踪”,它可以显示线程状态(线程在哪里运行,当线程被阻塞时,等等)。还有CPU视图(所以您可以看到每个内核在任何给定的时间点上都在做什么)。 我要看的第一件事是使用了多少线程(如果它是64+,那么您可能就没有工作线程了)。第二,我会查看主线程被阻塞的频率。 我也倾向于添加兴趣点范围(例如替代DTSendSignalFlag来识别仪器中的关键事件?),这样您就可以在相当令人生畏的仪器分析中缩小您的关注点。
  • 另一个是“时间分析器”(包括使用“记录等待线程”选项),您可以在其中分析在代码中花费时间的位置。

实际上,我们不太可能根据到目前为止提供的信息来诊断问题。但是,在高竞争环境中,UIActivityIndicatorView将比许多手动动画例程表现得更好。但是如果你能做一个这个问题的简单的可再现的例子,希望它能把洛蒂从等式中带出来,那么我们就可以看看这个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60952976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档