Poszukuję sposobu na wydajne narysowanie wykresu liniowego z dużą ilością punktów (do 10 000) na iOS. Wykres otrzymuje dane w czasie rzeczywistym i wymaga aktualizacji wiele razy na sekundę. Próbuję znaleźć sposób na wydajne narysowanie wykresu, aby nie maksymalizować procesora i nie blokować głównego wątku podczas rysowania.Rysowanie wykresów z dużą ilością punktów wydajnie na iOS
Obecnie tworzę UIBezierPath
dla wykresu liniowego, w wątku tła, dodając wszystkie punkty i rysując je w CALayer (z włączonym rysunkiem asynchronicznym). Nie jest zbyt szybki, maksymalizuje procesor, a rysowanie jest tak powolne, że interfejs staje się opóźniony. Planuję dane w czasie rzeczywistym i teoretycznie mogę za każdym razem ponownie użyć tego samego UIBezierPath
i po prostu dołączyć nowe punkty, jednak starsze wartości są odrzucane po pewnym czasie, co oznacza, że punkty dla usuniętych wartości musiałyby zostać usunięte ze ścieżki Beziera , co nie jest możliwe.
Nie znalazłem niczego na temat wydajnego kreślenia dużych zbiorów danych na iOS, ale mam nadzieję, że są sposoby na wykorzystanie GPU do zwiększenia wydajności.
Czy musisz narysować wszystkie 10k punktów? Nawet na ekranie iPada to wydaje się zbyt wygórowane ... (więcej punktów niż poziomy pikseli). Czy rozważałeś uśrednienie danych w mniejszym zestawie? – Hamish
@ originaluser2 Całkowicie się zgadzam. Wykonuję jakąś pracę z klientem i nie udało mi się jeszcze wykluczyć ich z pomysłu wyciągnięcia tych wielu punktów. – JonasG
dobrze, jeśli jesteś w stanie przekonać ich, uśrednianie jest najlepszym rozwiązaniem! Wątpię, czy będziesz w stanie wykorzystać dużo GPU bez wchodzenia w pełni w Metal/Open GL. Jestem prawie pewien, że 'UIBezierPath' używa głównie Core Graphics pod maską i to wszystko działa na CPU. – Hamish