CPU资源消耗原因和解决方案:

1:对象创建

对象创建会分配内存,调整属性,甚至还有读取文件等操作,比较消耗CPU资源。尽量用轻量的对象代替重量的对象,可以对性能有所优化。比如CALayer比UIView要轻量许多,那么不需要响应触摸事件的控件,用CALayer显示会更加合适,如果对象不涉及UI操作,则尽量放到后台线程区创建,可惜的是包含有CALayer的控件都只能在主线程创建和操作。在性能敏感的界面,Storyboard并不是一个好的技术选择。

尽量推迟对象创建的时间,并把对象的创建分散到多个任务中去。如果对象可以复用。并且复用的代价比释放创建新对象要小,那么这类对象应当尽量放到一个缓存池里复用。

  1. 对象调整:

对象的调整也经常是消耗CPU资源的地方,这里特别说一下CALayer,它内部并没有属性,当调用属性方法时,它内部是通过运行resolveInstanceMethod为对象临时添加一个方法,并把对应属性值保存到内部的一个Dictionary里,同时还会通知delegate,创建动画等等,非常消耗资源。UIView的关于显示相关的属性比如frame,bounds,transform等实际上都是CALayer属性映射来的,所以对UIView的这些属性进行调整时,消耗的资源要远大于一般的属性,应该尽量减少不必要属性的修改。

3:对象销毁:

对象的销毁虽然消耗资源不多,但累积起来不容忽视。通常当容器类持有大量对象时,其销毁时的资源消耗就非常明显。同样的,如果对象可以放到后台线程去释放,那就拖到后台线程。

4:布局计算:

视图布局的计算是APP中最为常见的消耗CPU资源的地方,最好能在后台线程提前计算好视图布局,并且对视图布局进行缓存。

不论通过何种技术对视图进行布局,其最终都会落到对UIView.frame/bounds/center等属性的调整上,对这些属性的调整非常耗资源,在需要时一次性调整好对应属性,而不要多次,频繁的计算和调整这些属性。

5:AutoLayout:

是苹果本身提倡的技术,在大部分情况下能很好的提升开发效率,但是AutoLayout对于复杂视图来说常常会产生严重的性能问题,随着视图数量的增长,AutoLayout带来的CPU消耗会呈指数级上升,如果你不想手动调整frame等属性,你可以用一些工具方法代替,或者使用ComponentKit,AsyncDisplayKit等框架。

6:文本计算:如果一个界面中包含大量文本,文本的宽高计算会占用很大一部分资源,并且不可避免,如果对文本的显示没有特殊要求,可以参考UILabel内部的实现方法,用[NSAttributedString boundingRectWithSize:options:context]来计算文本宽高。用-[NSAttributedString drawWithRect:options:context]来绘制文本。尽管这两个方法性能不错,但仍需要放到后台线程进行以避免阻塞主线程。

如果你用CoreText绘制文本,那么就可以先生成CoreText排版对象,然后自己计算

7:文本渲染:

屏幕上能看到的所有文本内容控件,包括UIWebView,在底层都是通过CoreText排版,绘制为Bitmap显示的。常见的文本控件UILabel,UITextView等,其排版和绘制都是在主线程进行的,当显示大量文本时,CPU的压力会非常大,对此解决方案只有一个,那就是自定义文本控件,用TextKit或最底层的CoreText对文本异步绘制,CoreText对象创建好后,能直接获取文本的宽高信息,避免了多次计算,CoreText对象占用内存较少,可以缓存下来以备稍后多次渲染。

8:图片的解码:

当你用UIImage或CGImageSource的那几个方法创建图片时,图片数据不会立即解码。图片设置到UIImageView或者CALayer.contents中去,并且CALayer被提交到GPU前,CGImage中的数据才会得到解码。这一步是发生在主线程,并且不可避免,如果想绕开这个机制,常见的做法是在后台线程把图片绘制到CGBitmapContext中,然后从Bitmap直接创建图片。常见的网络图片库都自带这个功能。

9:图像的绘制:

图像的绘制通常是指用方法把图像绘制到画布中,然后从画布创建图片并显示。这个最常见的地方就是[UIView drawRect:]里面了,由于CoreGraphic方法通常都是线程安全的,所以图像的绘制可以很容易的放到后台线程进行,一个简单异步绘制的过程大致如下

- (void)display {

   dispatch_async(backgroundQueue,^{

        CGContextRef ctx = CGBitmapContextCreate(...);

        CGImageRef img = CGBitmapContextCreateImage(ctx)

        CFRelease(ctx);

        dispatch_async(mainQueue,^{

             Layer.contents = img;

})

})

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AI 2020占用CPU是指2020年的人工智能技术在进行计算和处理时所需要的CPU资源。在过去的几年里,人工智能技术取得了巨大的进展和应用。AI 2020作为最新的一代人工智能技术,更加强大和复杂,因此需要更多的CPU资源来支持其运算和处理。 人工智能技术需要大量的计算来进行模型训练和推理。在AI 2020中,常见的任务包括图像识别、自然语言处理、语音识别等,这些任务需要大量的计算资源来处理数据和进行模型的训练。因此,AI 2020会在运行过程中占用较多的CPU资源CPU是计算机的核心处理单元,负责执行计算任务。AI 2020占用CPU意味着CPU会花费更多的时间和资源来处理和计算AI任务。这可能会导致其他应用程序在运行时变得缓慢,因为CPU资源被AI任务占用。 为了更好地处理AI 2020占用CPU的问题,有几个解决方案可供选择。一种解决方案是使用更强大的CPU或GPU来支持AI任务的计算需求。这样可以提高CPU的处理速度和效率,减少其他应用程序由于AI任务而受到的影响。 另一种解决方案是优化AI算法和模型,使其在CPU资源利用方面更加高效。通过对算法和模型的改进,可以减少AI任务对CPU资源的占用,并提高计算的效率。 总之,AI 2020占用CPU是由于其复杂的计算需求而导致的。通过使用更强大的CPU或GPU以及优化算法和模型,可以更好地处理AI任务对CPU资源的需求。 ### 回答2: AI技术2020年在很大程度上占用了CPU资源。随着人工智能的飞速发展,越来越多的应用程序和系统开始采用AI算法和技术来提升其性能和功能。这些应用程序包括语音识别、图像处理、自然语言处理和机器学习等。 将AI技术应用于这些领域需要大量的计算资源CPU作为计算机的核心组件之一,承担着核心的数据处理和计算任务。因此,当我们运行使用AI算法的应用程序时,CPU的负载会显著增加。 AI算法的复杂性和计算需求也是占用CPU的主要原因。例如,神经网络模型的训练过程需要大量的矩阵运算和浮点计算,这些计算任务会消耗大量的CPU资源。 此外,由于AI技术在2020年得到广泛应用,许多电脑和移动设备都开始加入AI芯片,来专门处理AI算法和任务。这些AI芯片具有专门优化的硬件结构,可以在处理AI任务时更高效地利用计算资源,从而减轻了CPU的负担。 虽然AI技术增加了CPU的负担,但同时也推动了CPU性能的提升。为了满足AI应用对计算性能的需求,CPU厂商也不断推出新的产品,提高了CPU的处理速度和能力。 综上所述,AI技术对CPU的占用在2020年有明显增加。随着人工智能技术的进一步发展,CPU的负担将持续增加,但同时CPU的性能也将不断提升,以适应更加复杂的AI应用需求。 ### 回答3: AI2020是一个人工智能技术,它可以占用CPU资源来运行算法和处理数据。由于AI2020需要大量的计算和处理能力,因此它通常会使用大部分或全部的CPU资源CPU(中央处理器)是计算机的核心部件,它负责执行计算、控制和运行程序等任务。在AI2020占用CPU时,它会使用CPU的计算能力来进行模型训练、图像识别、语音识别和自然语言处理等复杂任务。AI2020占用CPU可能会导致计算机运行变慢,尤其是在运行其他程序或同时进行其他任务时。为了提高计算机性能和避免过度占用CPU资源,可以采取一些措施,如优化AI2020算法、增加CPU的处理能力或使用专门的AI加速硬件。总之,AI2020占用CPU是为了实现更高级的人工智能功能,但我们也需要平衡计算机的整体性能和资源利用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值