Разработка iPhone: производительность Core-Plot низкая при обработке огромных данных

Разработка для iPhone: производительность Core-Plot снижается при обработке больших объемов данных.

Я попытался поместить 500 данных в график. Производительность показывает, что это действительно медленно.

И большая часть диаграммы CandleStick смешивается вместе...

У кого-нибудь есть решение для меня, пожалуйста?


person nullmicgo    schedule 10.02.2012    source источник
comment
Вы должны использовать инструменты для профилирования кода и посмотреть, где он тратит большую часть своего времени.   -  person benzado    schedule 10.02.2012


Ответы (3)


  1. Обратите внимание на площадь участка. Если у вас больше точек данных, чем пикселей, отфильтруйте набор данных, как предложил @benzado.

  2. Используйте графические элементы, которые быстро рисуются — непрозрачные цвета, без градиентов, без изображений, без теней. Если полосы будут шириной всего в несколько пикселей, не устанавливайте и заливку, и границу; используйте тот, который рисует быстрее.

  3. Уменьшите или удалите посторонние элементы, такие как мелкие деления и линии сетки.

  4. Используйте один из методов источника данных, который предоставляет группу точек в одном вызове, а не по одной за раз.

    -(NSArray *)numbersForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange;
    -(double *)doublesForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange;
    -(CPTNumericData *)dataForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange;
    
person Eric Skroch    schedule 11.02.2012
comment
Для № 4: code.google.com/p/core-plot/source/browse/examples/ - person Eric Skroch; 11.02.2012
comment
большое спасибо за ответ, Эрик. На самом деле, я пытался загрузить этот пример проекта раньше, но когда я скомпилировал его, появилось много ошибок (я ничего не менял), он сказал, что что-то не найдено. Сейчас я использую core-plot0.4 для разработки графика подсвечника, но теперь последняя версия 0.9, как вы думаете, я должен изменить на 0.9? если я изменюсь, мне придется изменить много кода... - person nullmicgo; 13.02.2012
comment
я бы обновил. С версии 0.4 многое изменилось. Множество исправлений ошибок и некоторые оптимизации производительности. Однако вам придется внести некоторые изменения в код, чтобы он заработал. Если вы хотите идти в ногу со временем, получите последний код с помощью Mercurial. Версия 1.0 почти готова и не должна сильно отличаться от того, что доступно сейчас. - person Eric Skroch; 13.02.2012
comment
Привет, это снова я. Я сейчас изменил на 0,9. я пытаюсь использовать эту функцию, чтобы помочь мне разделить 1400 данных в графике - (NSArray *) numbersForPlot: (CPTPlot *) поле графика: (NSUInteger) fieldEnum recordIndexRange: (NSRange) indexRange; У вас есть пример, который создает UIScrollBar внизу, прокрутите влево, чтобы изменить диапазон данных, тогда мне не нужно указывать все 1400 данных на графике одновременно? - person nullmicgo; 14.02.2012

Мы провели несколько сравнений скорости iOS Charts, и одним из них был Core-plot. К сожалению, Core-plot был настолько медленным, что не смог выполнить первый тест!

Были и другие компоненты диаграмм, которые могли гораздо эффективнее обрабатывать большие данные.

Результаты теста и настройки теста находятся здесь: https://www.scichart.com/ios-chart-performance-comparison

В формате таблицы результаты сравнения четырех основных поставщиков диаграмм iOS можно найти здесь.

Сравнение производительности диаграммы iOS

Раскрытие информации, я технический руководитель проекта SciChart

person Dr. Andrew Burnett-Thompson    schedule 09.08.2017

Постройте образец ваших данных! Не наносите на график все 500 точек данных, если вам на самом деле не нужно рисовать их все.

person benzado    schedule 10.02.2012
comment
Спасибо за ваш ответ. Поскольку я делаю биржевую диаграмму, мне нужно поместить в нее все 500 или более данных. - person nullmicgo; 10.02.2012