【问题标题】:Why CPU usage is high when I using @Published?为什么使用@Published 时CPU 使用率很高?
【发布时间】:2022-12-05 20:04:12
【问题描述】:

我正在尝试接收帧数据并以 60fps 的速度渲染到 MTKView。
我的MTKView和Reference about SwiftUI using MTKView中的PreviewView.swift几乎一样

这是我尝试刷新和发布数据的代码:

        NDI_Queue.async {
            while(self.Connected){
                if let buf = self.PrepareFrame(){
                    let ciImage = CIImage(cvImageBuffer: buf)
                    DispatchQueue.main.async {
                        self.NDI_Frame = ciImage
                    }
                }
            }
        }

我使用PrepareFrame()uint8_t*抓取并创建CVPixelBuffer,之后,我将其转换为CIImage
最后我使用@Published更新NDI_Frame并在主线程上刷新到MTKView

不幸的是,视图滞后,帧率非常不稳定。
在我的代码中创建 CVPixelBuffer 只占用大约 5% 的 CPU 使用率。
但是当我发布数据时主线程超载。

抱歉,我是 Swift 的新手。
请告诉我我哪里做错了。
欣赏它。

【问题讨论】:

标签: swift swiftui


【解决方案1】:

您不认为上面的代码中存在无限循环吗:while(self.Connected)? 我建议使用计时器或其他某种形式的调度来限制循环运行的次数或完全重新考虑代码。

【讨论】:

  • 目前使用 Timer 时是零差异,因为性能已经有上限了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
相关资源
最近更新 更多