Puede intentar usar GDI + o x directo en lugar de WPF.
Hice un proyecto similar (representación de datos de mapas a través de WPF), para un artículo de la revista MSDN que escribí hace un año.
Fue algo que escribí bastante rápido (el artículo + la aplicación tomó aproximadamente 1 semana), y fue diseñado para ser solo "esto es algo ordenado que puedes hacer", así que no me enfoqué en el rendimiento mucho. En cualquier caso, me encontré con el mismo problema.Una vez que el número de polígonos en el lienzo se hizo grande, el rendimiento de la representación comenzó a sufrir. Por ejemplo, cambiar el tamaño de la ventana implicaría aproximadamente un retraso de 1/2 segundo más o menos.
Mucho de esto tiene que ver con la sobrecarga de WPF. Está diseñado principalmente como un conjunto de herramientas GUI, en lugar de un motor gráfico de alto rendimiento. Eso significa que se enfoca en la riqueza de características sobre la representación eficiente. Con un número menor de objetos (lo que es probable encontrar en la mayoría de las aplicaciones GUI), el rendimiento es bastante bueno y las funciones de enlace de datos, animación y estilo declarativo (y todo el enrutamiento de eventos y otras cosas que requieren) pueden ser útiles. .
Al dibujar un mapa, sin embargo, el gran volumen de datos puede causar que todas esas características de enlace de datos limpios causen problemas de perfusión, como parece muy consciente.
Si no necesita un estilo y animación declarativos, simplemente eliminaría WPF y usaría GDI + para dibujar el mapa usted mismo. Básicamente implica configurar la matriz de transformación correcta para que el mapa dibuje sobre una superficie de control, y luego iterar a través de todos los polígonos y llamar a un grupo de métodos DrawPolygon.
Para habilitar la interacción, tendrá que escribir su propio código de prueba de impacto, y tendrá que volver a dibujar el mapa cada vez que se cambie el tamaño del formulario. También tendrá que codificar a mano cualquier animación o cambio de estilo o cosas así que desee (como resaltar regiones cuando el mouse está sobre ellas). Pero no debería ser tan difícil escribir ese código. Imaginé que podrías hacerlo en aproximadamente 1,5 semanas.
Hacerlo de esa manera, sin embargo, debería mejorar el rendimiento, ya que se reduciría a hacer solo unas 20-30K transformaciones de vectores, lo que no requiere mucha potencia de procesador en la mayoría de las CPU modernas. También podría considerar el uso de Direct X, lo que le permitiría aprovechar la GPU también, lo que podría aumentar aún más el rendimiento.
Gracias por el enlace a QT, sin saber si va a trabajar para mi implementación, porque necesito implementarlo como un XBAP. – Dylan
QT también tiene una función de complemento de navegador: si busca en el área de soporte para desarrolladores, debería poder encontrarla. Es posible que desee editar su publicación original para aclarar el requisito de XBAP. – ConcernedOfTunbridgeWells