开发平台:Unity 2022 版本以上
开发语言:CSharp 6.0
编程平台:Visual Studio 2022
关键词:Sempaphore.WaitForSignal
问题背景
- 开发过程中出现 Waiting to excute code… 长时间阻碍运行。
- 使用 逐对象排查法 确认影响无法运行的游戏对象的大概位置。
- 使用 运行再激活 方式强制运行游戏对象。
- 使用 Profile 性能分析器查看当前运行状况,发现 CPU Usage/Others 持续高额度占用。
- 根据 Hierarchy 分栏确认 Sempaphore.WaitForSignal 的持续运行时间较长(Self ms)且调度次数高频(Calls)。
关于 Sempaphore.WaitForSignal
官方文档解释
- 包含描述线程上的同步点的示例。若要查找它正在等待的线程,请检查“时间轴”视图中是否有在此线程之前不久结束的示例。
开发者解释
- 这只是意味着主线程处于休眠状态,等待来自另一个线程的信号。它实际上并没有消耗 CPU 时间。渲染线程正在工作,我猜在某个时候,这个渲染线程在完成时会向主线程发出信号。
解决方法
- 使用 Timeline 分栏查看 Sempaphore.WaitForSignal 时间轴开端前的信息。
笔者问题:确认到来自本地程序 GameCoroutine.Delay
的问题。排查是否有逻辑错误导致调用的脚本方法。
其他问题应根据实际 Profile 反馈实际问题进行处理。