2 votes

Comment optimiser le quartz 2d ?

J'ai un bloc de code qui est essentiellement :

    for(int i=0;i<aInt;i++){
        CGPoint points[2] = {CGPointMake(i,0),CGPointMake(i,bArray[i])};
        CGContextStrokeLineSegments(myContext, points, 2);
    }

ce qui provoque un goulot d'étranglement lorsque aInt devient grand, comme c'est probablement le cas dans ma situation. Je ne connais pas assez le quartz 2d pour savoir comment l'optimiser au mieux. Est-il préférable de créer un énorme tableau de points dans la boucle et d'alimenter ensuite le tableau entier une seule fois ?

Ou plus idéalement, j'ai juste optimisé une partie différente du code qui traite des tableaux. Ce faisant, je me suis converti à l'utilisation de tableaux de style C, ce qui a considérablement accéléré les choses. Existe-t-il une méthode similaire de bas niveau pour réaliser ce qui précède ?

Merci de votre attention !

3voto

epatel Points 32451

J'imagine également que la création d'un grand tableau rendra le processus plus rapide. Il y aura certainement moins d'appels à CGContextStrokeLineSegments .

CGPoint *points = (CGPoint*)malloc(sizeof(CGPoint)*aInt*2);

for(int i=0;i<aInt;i++){
    points[i*2] = CGPointMake(i,0);
    points[i*2+1] = CGPointMake(i,bArray[i]));
}

CGContextStrokeLineSegments(myContext, points, aInt*2);

free(points);

0voto

Ben Gottlieb Points 59900

Oui, la création d'un grand tableau unique sera certainement plus rapide que le traitement de chaque segment de ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X