Desempenho ao desenhar com frequência CGPaths

Estou trabalhando em um aplicativo para iOS que visualiza dados como um gráfico de linhas. O gráfico é desenhado como umCGPath em uma tela personalizadaUIView e contém no máximo 320 pontos de dados. Os dados são atualizados com freqüência e o gráfico precisa ser redesenhado de acordo. Uma taxa de atualização de 10 / s seria bo

Tão longe tão fácil. Parece, no entanto, que minha abordagem leva muito tempo da CPU. Atualizar o gráfico com 320 segmentos a 10 vezes por segundo resulta em 45% da carga da CPU para o processo em um iPhone 4S.

alvez eu subestime o trabalho gráfico sob o capô, mas para mim a carga da CPU parece muito para essa taref

Bow is mydrawRect() função que é chamada sempre que um novo conjunto de dados está pronto.N contém o número de pontos epoints é umCGPoint* vector com as coordenadas para desenha

- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    // set attributes
    CGContextSetStrokeColorWithColor(context, [UIColor lightGrayColor].CGColor);
    CGContextSetLineWidth(context, 1.f);

    // create path
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddLines(path, NULL, points, N+1);

    // stroke path
    CGContextAddPath(context, path);
    CGContextStrokePath(context);

    // clean up
    CGPathRelease(path); 
}

Tentei renderizar o caminho para um CGContext offline antes de adicioná-lo à camada atual, conforme sugeridoaqu, mas sem nenhum resultado positivo. Eu também brinquei com uma abordagem de desenho diretamente para o CALayer, mas isso também não fez diferenç

Alguma sugestão de como melhorar o desempenho desta tarefa? Ou a renderização é simplesmente mais trabalhosa para a CPU que eu percebo? O OpenGL faria algum sentido / diferença?

Obrigado / Andi

Atualizar Eu também tentei usarUIBezierPath ao invés deCGPath. Esta postagemaqu dá uma boa explicação por que isso não ajudou. AjustandoCGContextSetMiterLimit et al. também não trouxe grande alívio.

Update # 2: Eu finalmente mudei para o OpenGL. Foi uma curva de aprendizado íngreme e frustrante, mas o aumento de desempenho é simplesmente incrível. No entanto, os algoritmos de anti-aliasing da CoreGraphics fazem um trabalho melhor do que o que pode ser alcançado com a amostragem múltipla de 4x no OpenG

questionAnswers(5)

yourAnswerToTheQuestion