世界跟踪性能受到资源限制的影响

如何解决世界跟踪性能受到资源限制的影响

我制作了一个可以跟踪手部位置并根据手指位置移动 AR 对象的应用程序。主要方法使用视觉框架。代码运行没有任何问题,但是在相机中检测到手的瞬间,程序在正常运行之前冻结了近一秒钟。这是我称之为视觉框架的代码。

    // MARK: - SCNSceneRendererDelegate
    func renderer(_ renderer: SCNSceneRenderer,didRenderScene scene: SCNScene,atTime time: TimeInterval) {
        updateCoreML()
    }

这是控制台日志中的输出。每当我重新启动应用程序时,都会打印出来。

=================================================================
Main Thread Checker: UI API called on a background thread: -[UIView bounds]
PID: 4771,TID: 5232327,Thread name: com.apple.scenekit.scnview-renderer,Queue name: com.apple.scenekit.renderingQueue.ARSCNView0x106705f90,QoS: 33
Backtrace:
4   AR_1                                0x00000001029146b4 $s4AR_114ViewControllerC12updateCoreMLyyF + 11688
5   AR_1                                0x0000000102917a0c $s4AR_114ViewControllerC8renderer_14didRenderScene6atTimeySo16SCNSceneRenderer_p_So0J0CSdtF + 72
6   AR_1                                0x0000000102917a74 $s4AR_114ViewControllerC8renderer_14didRenderScene6atTimeySo16SCNSceneRenderer_p_So0J0CSdtFTo + 92
7   SceneKit                            0x00000001e0d578f0 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1505520
8   SceneKit                            0x00000001e0dde3d4 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 2057172
9   SceneKit                            0x00000001e0c56040 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 450624
10  SceneKit                            0x00000001e0c5785c EC930BC7-1D62-3C34-AE79-B49A41F6198E + 456796
11  SceneKit                            0x00000001e0d5d010 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1527824
12  SceneKit                            0x00000001e0d5d87c EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1529980
13  SceneKit                            0x00000001e0d5de20 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1531424
14  SceneKit                            0x00000001e0d5e204 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1532420
15  SceneKit                            0x00000001e0e009a0 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 2197920
16  SceneKit                            0x00000001e0cb5958 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 842072
17  SceneKit                            0x00000001e0dc9be0 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1973216
18  libdispatch.dylib                   0x00000001030a56c0 _dispatch_client_callout + 20
19  libdispatch.dylib                   0x00000001030b5f14 _dispatch_lane_barrier_sync_invoke_and_complete + 176
20  SceneKit                            0x00000001e0dc9b64 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1973092
21  GPUToolsCore                        0x00000001032a4f44 -[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 172
22  QuartzCore                          0x00000001afc8b6fc 8510F139-0824-3686-A9AA-3E198539A021 + 83708
23  QuartzCore                          0x00000001afd64a80 8510F139-0824-3686-A9AA-3E198539A021 + 973440
24  CoreFoundation                      0x00000001ac910dd0 727F2644-EB4E-3D57-BC2E-E6803BA92366 + 511440
25  CoreFoundation                      0x00000001ac935fe8 727F2644-EB4E-3D57-BC2E-E6803BA92366 + 663528
26  CoreFoundation                      0x00000001ac935378 727F2644-EB4E-3D57-BC2E-E6803BA92366 + 660344
27  CoreFoundation                      0x00000001ac92f08c 727F2644-EB4E-3D57-BC2E-E6803BA92366 + 635020
28  CoreFoundation                      0x00000001ac92e21c CFRunLoopRunSpecific + 600
29  Foundation                          0x00000001adbdddf0 7698BF3E-0CF6-31C0-85E9-562714F01276 + 36336
30  SceneKit                            0x00000001e0cb5ea4 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 843428
31  SceneKit                            0x00000001e0cb61bc EC930BC7-1D62-3C34-AE79-B49A41F6198E + 844220
32  libsystem_pthread.dylib             0x00000001f8467cb0 _pthread_start + 320
33  libsystem_pthread.dylib             0x00000001f8470778 thread_start + 8
2021-03-04 20:42:49.062465+0900 AR_1[4771:5232327] [reports] Main Thread Checker: UI API called on a background thread: -[UIView bounds]
PID: 4771,QoS: 33
Backtrace:
4   AR_1                                0x00000001029146b4 $s4AR_114ViewControllerC12updateCoreMLyyF + 11688
5   AR_1                                0x0000000102917a0c $s4AR_114ViewControllerC8renderer_14didRenderScene6atTimeySo16SCNSceneRenderer_p_So0J0CSdtF + 72
6   AR_1                                0x0000000102917a74 $s4AR_114ViewControllerC8renderer_14didRenderScene6atTimeySo16SCNSceneRenderer_p_So0J0CSdtFTo + 92
7   SceneKit                            0x00000001e0d578f0 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1505520
8   SceneKit                            0x00000001e0dde3d4 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 2057172
9   SceneKit                            0x00000001e0c56040 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 450624
10  SceneKit                            0x00000001e0c5785c EC930BC7-1D62-3C34-AE79-B49A41F6198E + 456796
11  SceneKit                            0x00000001e0d5d010 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1527824
12  SceneKit                            0x00000001e0d5d87c EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1529980
13  SceneKit                            0x00000001e0d5de20 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1531424
14  SceneKit                            0x00000001e0d5e204 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1532420

15  SceneKit                            0x00000001e0e009a0 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 2197920
16  SceneKit                            0x00000001e0cb5958 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 842072
17  SceneKit                            0x00000001e0dc9be0 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1973216
18  libdispatch.dylib                   0x00000001030a56c0 _dispatch_client_callout + 20
19  libdispatch.dylib                   0x00000001030b5f14 _dispatch_lane_barrier_sync_invoke_and_complete + 176
20  SceneKit                            0x00000001e0dc9b64 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 1973092
21  GPUToolsCore                        0x00000001032a4f44 -[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 172
22  QuartzCore                          0x00000001afc8b6fc 8510F139-0824-3686-A9AA-3E198539A021 + 83708
23  QuartzCore                          0x00000001afd64a80 8510F139-0824-3686-A9AA-3E198539A021 + 973440
24  CoreFoundation                      0x00000001ac910dd0 727F2644-EB4E-3D57-BC2E-E6803BA92366 + 511440
25  CoreFoundation                      0x00000001ac935fe8 727F2644-EB4E-3D57-BC2E-E6803BA92366 + 663528
26  CoreFoundation                      0x00000001ac935378 727F2644-EB4E-3D57-BC2E-E6803BA92366 + 660344
27  CoreFoundation                      0x00000001ac92f08c 727F2644-EB4E-3D57-BC2E-E6803BA92366 + 635020
28  CoreFoundation                      0x00000001ac92e21c CFRunLoopRunSpecific + 600
29  Foundation                          0x00000001adbdddf0 7698BF3E-0CF6-31C0-85E9-562714F01276 + 36336
30  SceneKit                            0x00000001e0cb5ea4 EC930BC7-1D62-3C34-AE79-B49A41F6198E + 843428
31  SceneKit                            0x00000001e0cb61bc EC930BC7-1D62-3C34-AE79-B49A41F6198E + 844220
32  libsystem_pthread.dylib             0x00000001f8467cb0 _pthread_start + 320
33  libsystem_pthread.dylib             0x00000001f8470778 thread_start + 8
2021-03-04 20:42:57.812761+0900 AR_1[4771:5233782] [Technique] ARWorldTrackingTechnique <0x10341bc30>: World tracking performance is being affected by resource constraints [0]

我认为调用函数的时间不正确,这就是为什么它说性能受到资源限制的影响。我尝试使用 updateAtTime 委托,但它不起作用。调用单独的线程也可能有效,但我不确定。

解决方法

根据日志,在 updateCoreML() 中,您正在调用与 UIKit 更改有关的内容。

你可以尝试在下面的事情中包装这个函数吗?

// MARK: - SCNSceneRendererDelegate
func renderer(_ renderer: SCNSceneRenderer,didRenderScene scene: SCNScene,atTime time: TimeInterval) {
   DispatchQueue.main.async { [weak self] in
      self?.updateCoreML() 
   }
}
,
  • 为什么主队列修复有效

您正在主队列之外调用 UIKit 函数(在您的情况下为 view.bounds),这在 Swift 中是不允许的。

  • 关于 ARC[weak self] 的说明:

Weak 指的是块内对象的自动引用计数 (ARC)。

引用计数 - Swift 的内存管理。 你可以在这里读更多关于它的内容: https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html

在这种情况下,我们在我们的闭包捕获列表(参见:Closure Capture List)中使用 [weak self] 来确保 self(在您的情况下 ViewController strong>) 不是强保留。

换句话说,如果你的 ViewController 实例要被释放,在块执行被调用之前,该实例将被释放并且 self 等于 nil 一旦块被调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-