En una de mis herramientas SIG basadas en arcobjects tengo un proceso que toma una matriz de rutas de shapefile y las utiliza como entradas con el ESRI.ArcGIS.DataManagement.Merge herramienta. Lo ejecuto a través de un Geoprocesador ejemplo. Utilizo esta configuración para otras tareas gp (como Get Count y Calculate Field), pero he descubierto que un proceso de fusión tarda mucho más en procesarse que si lo hubiera ejecutado en ArcMap o ArcCatalog. Por ejemplo, un proceso que he cronometrado en alrededor de 3 horas tomó más de 27 para completar cuando se realiza con este método en ArcObjects.
¿Alguien ha experimentado esto antes, y hay algún método conocido para acelerar el proceso?
EDITAR :
Para ser más explícito sobre el flujo de trabajo que tiene lugar aquí:
- Crea un objeto backgroundworker para hacer esto en un hilo separado para evitar el bloqueo de la UI.
- Enumerar las rutas de los archivos shape mediante Directory.GetFiles y añadirlas a una cadena de ruta delimitada por punto y coma para la operación de fusión
- Realice un recuento de cada Shapefile
- Utilice la cadena de ruta para realizar una operación de fusión.
He intentado usar IGeoProcessor
y Geoprocessor
para ver si hay algún aumento notable en el rendimiento, pero fue en vano. No hay bucles apretados involucrados (a menos que usted considere rápido Get Counts), y ciertamente no tengo ningún uso para un EditSession. Sin embargo, por alguna razón, el proceso avanza a un ritmo increíblemente lento.
Cabe señalar que estoy trabajando con conjuntos de datos excesivamente grandes (la red de carreteras de Norteamérica, por ejemplo), por lo que dudo que cualquier método que haga uso de la memoria RAM como espacio de trabajo sea adecuado.