Możesz spróbować użyć GDI + lub bezpośredniego x zamiast WPF.
Zrobiłem podobny projekt (renderowanie danych mapy przez WPF), dla artykułu czasopisma MSDN napisałem około rok temu.
To było coś, co napisałem dość szybko (artykuł + aplikacja trwała około 1 tygodnia) i został zaprojektowany tak, aby po prostu być "to jest coś, co możesz zrobić", więc nie skupiałem się na wydajności dużo. W każdym razie wpadłem na ten sam problem.Po zwiększeniu liczby wielokątów na płótnie wydajność renderowania zaczęła spadać. Na przykład zmiana rozmiaru okna wymagałaby około 1/2 sekundy opóźnienia.
Wiele z tego ma związek z obciążeniem WPF. Został zaprojektowany przede wszystkim jako zestaw narzędzi GUI, a nie jako wydajny silnik graficzny. Oznacza to, że koncentruje się na bogactwie funkcji w porównaniu do renderingu efektywnego. Przy mniejszej liczbie obiektów (co prawdopodobnie znajdzie się w większości aplikacji GUI), wydajność jest całkiem dobra, a funkcje łączenia danych, animacji i deklaratywnych stylów (oraz wszystkie routing zdarzeń i inne rzeczy, których wymagają) mogą się bardzo przydać .
Podczas rysowania mapy, sama objętość danych może spowodować, że wszystkie te zgrabne funkcje wiązania danych spowodują problemy związane z perfekcją, co wydaje się być dobrze znane.
Jeśli nie potrzebujesz deklaratywnego stylu i animacji, to po prostu wyeliminowałbym WPF i używałbym GDI +, aby narysować mapę jako swoją. Zasadniczo polega ona na ustawieniu odpowiedniej macierzy transformacji, aby mapa narysowała na powierzchni kontrolnej, a następnie iterowała przez wszystkie wielokąty i wywoływała kilka metod DrawPolygon.
Aby włączyć interakcję, musisz napisać własny kod testowy trafień, a będziesz musiał przerysować mapę w dowolnym momencie zmiany rozmiaru formularza. Będziesz także musiał ręcznie kodować wszelkie animacje lub zmiany stylu lub rzeczy, które chcesz zrobić (takie jak podświetlanie regionów, gdy mysz znajduje się nad nimi). Ale nie powinno być tak trudno napisać ten kod. Chciałbym zobrazować, że można to zrobić za około 1,5 tygodnia.
Wykonanie tego w ten sposób powinno poprawić wydajność, ponieważ sprowadza się tylko do transformacji wektorowej 20-30K, która nie wymaga dużej mocy obliczeniowej na większości nowoczesnych procesorów. Możesz także zajrzeć do Direct X, który pozwoli Ci również skorzystać z GPU, co może dać jeszcze większy wzrost wydajności.
Dzięki za link do QT, nie wiem, czy to będzie działać na moim implementacja, ponieważ muszę wdrożyć jako XBAP. – Dylan
QT ma również funkcję wtyczki przeglądarki - jeśli polujesz w obszarze wsparcia programisty, powinieneś być w stanie go znaleźć. Możesz edytować swój oryginalny wpis, aby wyjaśnić wymagania XBAP. – ConcernedOfTunbridgeWells