gpt4 book ai didi

objective-c - 限制后台线程的 CPU 使用率

转载 作者:太空狗 更新时间:2023-10-30 03:19:12 26 4
gpt4 key购买 nike

我有一个 CPU 密集型任务,我希望它使用更少的 CPU 并占用更多时间。

我在启动时将大量 SCNNode 加载到场景中。它占用大量内存,我希望它以安全的速度处理它,而不是让我的系统滞后或可能导致系统崩溃。

这是我用来加载节点的代码。

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void){
NSLog(@"Start Loading Level");
SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
cameraNode.camera.zFar = 5000;
cameraNode.position = SCNVector3Make(0, 3000, 0);
cameraNode.rotation = SCNVector4Make(1, 0, 0, -M_PI_2);
[scene.rootNode addChildNode:cameraNode];
for (int i = 0; i < 100000; i++)
{
int side = 3000;
SCNNode *node = [SCNNode node];
node.geometry = [SCNBox boxWithWidth:1 height:1 length:1 chamferRadius:0];
node.position = SCNVector3Make(arc4random_uniform(side) - side / 2.0,
0,
arc4random_uniform(side) - side / 2.0);
[scene.rootNode addChildNode:node];
}
dispatch_async(dispatch_get_main_queue(), ^(void){
NSLog(@"Finished");
});
});

统计数据如下:

Image Usage over Time Image Memory

最佳答案

这可能不是最好的方法,但你看过 prepareobject: 了吗?

创建 NSObjects 本身应该不是什么大问题,但准备几何体并将其添加到场景中可能是大问题。如果将此步骤推迟到辅助线程,您将节省一些 CPU 并使场景在节点准备好添加之前不会停止。

一旦每个节点准备就绪,(完成处理程序)只需将其添加到场景中即可。我不会限制加载,但它至少会以更安全的方式处理您应用的其余部分。

https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNSceneRenderer_Protocol/index.html#//apple_ref/occ/intfm/SCNSceneRenderer/prepareObjects:withCompletionHandler :

-(void)prepareLevel{
// Mutable Array to save the nodes
NSMutableArray *nodes = [[NSMutableArray alloc] init];

for (int i = 0; i < 100000; i++)
{
int side = 3000;
SCNNode *node = [SCNNode node];
node.geometry = [SCNBox boxWithWidth:1 height:1
length:1 chamferRadius:0];
node.position = SCNVector3Make(arc4random_uniform(side) - side / 2.0,
0,
arc4random_uniform(side) - side / 2.0);

[nodes addObject:node];
}

[mySCNView prepareObjects:nodes withCompletionHandler:^(BOOL success) {
for(SCNNode*node in nodes){
[scene.rootNode addChildNode:node];
}
}];

}

关于objective-c - 限制后台线程的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29705842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com