2010-11-30 13 views
6

Buenas tardes,¿Acceso a múltiples subprocesos a MapPoint?

Como dije anteriormente en otra publicación, tengo que calcular unas 8,000,000 distancias de ruta/tiempo más corta entre algunos puntos del mapa, cuyas coordenadas se conocen. El problema es que, aunque las distancias en línea recta fueron fáciles (y rápidas) de calcular, alguien me dijo que una aplicación de un solo subproceso puede tener problemas para calcular este número de distancias con MapPoint. La cuestión es que no sé nada sobre el multi-threading ... Actualmente estoy trabajando en un entorno i7 - 720QM, por lo que me gustaría utilizar los 4 núcleos para hacer estos cálculos ... ¿Hay alguna manera fácil de hacerlo? en C# o C++?

Muchas gracias.

Respuesta

3

Si es totalmente nuevo en el multihilo, mi consejo es comenzar con el componente BackGroundWorker como punto de partida y cambiar gradualmente a conceptos de roscado más garnulares.

y si está utilizando ..net 4.0 que la Biblioteca de tareas paralelas le ofrece una manera fácil de empezar.

ver enlaces más abajo

TPL

BackGroundWorker

+0

¿Puedo usar TPL con MapPoint? ¿Puedo paralelizar bucles? – user2381422

1

que podrían haber sido yo quien dijo que tomaría mucho tiempo. La API COM de MapPoint tiene un solo subproceso. La forma de hacerlo calcular múltiples rutas en paralelo es iniciar múltiples MapPoint, cada uno en su propio hilo.

Por lo tanto, para su núcleo cuádruple, comenzará 2-3 hilos. Cada subproceso inicia su propio MapPoint y luego lo usa para el enrutamiento. NO tendrás un MapPoint por núcleo. Además de la sobrecarga del sistema operativo y su sobrecarga de E/S, si observa un solo MapPoint calcular una ruta, encontrará que las versiones posteriores tienen en subprocesos múltiples internamente y pueden tomar aproximadamente 1.5 núcleos si están disponibles.

También hay un montón de cosas que tener en cuenta. La recolección de basura propia de MapPoint no está optimizada para el cálculo de ruta por lotes. La solución más sencilla para esto es simplemente reiniciar cada aplicación MapPoint en intervalos periódicos (al menos una vez al día, pero probablemente con más frecuencia).

Además, algunas operaciones (File Open parece ser la principal) no pueden ser llamadas por múltiples MapPoints a la vez. Probablemente porque están tratando de abrir el mismo archivo, pero no he investigado más. Tendrá que implementar su propio mecanismo de bloqueo para evitar esto.

consejo de Saurabh para .NET 4 suena bien: todavía tengo que usar múltiples hilos de .NET 4 en la ira - mi MapPoint/.NET experiencia de rosca está con .NET 2.

no sé qué su aplicación sí lo es, pero ¿sabía que vendo un producto que usa MapPoint multiprocesador para el cálculo de distancia/tiempo de ruta por lotes ... :-)

+0

Dijiste que MapPoint tiene un solo hilo. Pero Saurabh dijo que puedo usar TPL. Entonces, ¿quién está aquí? – user2381422

+0

Pruébalo: ten en cuenta que Saurabh no dice explícitamente que lo haya usado con MapPoint. Mi experiencia con MapPoint multi-threading (tanto C# como Python) es que tiene que ser muy basta (es decir, a nivel de aplicación), e incluso entonces necesita bloquear ciertas funciones. – winwaed

Cuestiones relacionadas