Ho un compito intensivo della CPU e voglio che utilizzi meno CPU e occupi più tempo.Utilizzo della CPU del throttle sul thread di sfondo
Sto caricando una quantità enorme di nodi SCN in una scena all'avvio. Richiede molta memoria e mi piacerebbe lavorarci su con sicurezza, invece di rallentare il mio sistema o potenzialmente bloccarlo.
Ecco il codice che sto usando per caricare i nodi.
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");
});
});
Qui ci sono le statistiche:
Sarei più preoccupato dal fatto che SceneKit dovrà rendere tanti nodi. 100000 nodi sono incredibilmente grandi. – mnuages
Questo è un caso di test. Potrei usare il codice del mio progetto, ma questo sembra avere il significato. –
Suggerirei di usare dispatch_apply() con stride invece che per (;;) all'interno di dispatch_async() per creare contemporaneamente nodi. –