Me gustaría saber qué se necesita para crear una implementación personalizada de una función ArcGIS. En particular, me gustaría implementar GeoAnalyst.ISurfaceOp2.Visibility () para que se ejecute más rápido. En este momento, está tomando ~ 3 segundos por llamada a Visibility (). Desde mi entendimiento limitado, el cuello de botella es la escritura de rásteres temporales en el sistema de archivos. Si esto se pudiera hacer en la memoria, sospecho que el tiempo de procesamiento disminuirá significativamente. Estoy haciendo esto en un proyecto .NET, pero las soluciones en cualquier idioma son bienvenidas.
arcgis-10.0
arcobjects
.net
algorithm
Ross Fuhrman
fuente
fuente
Respuestas:
Esta respuesta conmemora y amplía parte de la discusión en los comentarios. Un disco RAM emula una unidad de disco externa utilizando parte de la RAM en un sistema informático. Puede leer y escribir a velocidades comparables al almacenamiento en caché en memoria, menos un poco de sobrecarga para que los protocolos de traducción conviertan comandos orientados a disco en comandos orientados a memoria. Se crea un disco RAM ejecutando un software especial a nivel de sistema operativo, un "controlador de dispositivo". Los discos de código abierto y RAM gratuitos están disponibles para muchos sistemas operativos, incluido Windows.
Por lo tanto, una forma de acelerar un cuello de botella debido a la E / S de disco intermedia es configurar un disco RAM (comprando la RAM adicional si es necesario) y colocar la carpeta reutilizable allí. (Esto suele ser una configuración de software).
Otra opción es instalar un dispositivo de estado sólido (SSD) DRAM de alta gama , que esencialmente es un bloque de RAM en un paquete separado con una interfaz electrónica para actuar como una unidad de disco. Se instala en un sistema informático en lugar de una unidad de disco y se comportará exactamente como otra unidad de disco sin ningún software adicional, pero leerá y escribirá casi tan rápido como los accesos a la memoria. Estos son relativamente caros, pero es probable que solo se necesite uno pequeño incluso para el almacenamiento de trama intermedio muy grande.
Antes de tomar cualquiera de estos pasos, es importante perfilarEl proceso para determinar dónde está realmente el cuello de botella. (Windows se ha entregado con aplicaciones de monitoreo y creación de perfiles cada vez más potentes en los últimos años, disponibles en Win 7 como el par de Administrador de tareas / Monitor de recursos, y por supuesto, muchas aplicaciones similares también están disponibles para otros sistemas operativos). Muchos sistemas se configuran automáticamente, o se puede configurar para almacenar en caché las lecturas y escrituras de disco en la RAM por períodos cortos. El almacenamiento en caché funciona casi igual que un disco RAM, pero probablemente sea aún más rápido: el software cree que está escribiendo archivos intermedios en el disco, pero el sistema operativo los escribe temporalmente en la RAM primero, no accediendo al disco, con la esperanza de que pronto los mismos datos será leído y eliminado, en cuyo caso nunca será necesaria una escritura física.
Dada la cantidad de cómputo necesaria para cualquier cálculo de visibilidad completa (en un algoritmo ingenuo, cada celda debe ser inspeccionada para ver la visibilidad una vez para cada punto de vista), al menos se debe sospechar que la velocidad de computación, no la E / S del disco, puede ser el problema aquí. Si ese es el caso, los discos RAM o SSD serán una pérdida de tiempo y dinero. En cambio, el esfuerzo debe dirigirse a analizar y mejorar el algoritmo subyacente .
Alguna discusión sobre si el rendimiento del disco RAM ayuda a ArcGIS ha aparecido en otro hilo .
fuente
Desafortunadamente, no puede configurar IRasterAnalysisEnvironment para que funcione con un espacio de trabajo en memoria.
Este hilo aborda el problema.
fuente