6 votos

La medición del sorteo de la capa en ArcMap?

Me gustaría medir cuantitativamente el rendimiento de visualización de los datasets de mosaico, la imagen de las capas de servicio, de trama capas, las capas de entidades, etc. en ArcMap 10.

Cómo se puede medir el sorteo de una capa en particular (o en todo el proceso de dibujo si que es la única opción) en ArcMap? ¿Cuáles son las interfaces, objetos y eventos? Es el Cronómetro de la clase .NETO adecuado para la medición precisa de este tipo de operación?

Alguien ha creado ya un ArcMap complemento o extensión para este propósito?

6voto

saint_groceon Puntos 2696

No estoy seguro de que tan preciso es este, pero yo lo he hecho en el pasado:

Crear un LayerExtension clase que implementa ILayerExtensionDraw. Dentro de la clase, mantener una lista de los tiempos. Un momento es una clase con un inicio de la garrapata y un final de la garrapata de la propiedad. Cuando BeforeLayerDraw es llamado para esriDPGeography, una instancia de un nuevo cronometraje intance y establecer el StartTick de la propiedad con el medio Ambiente.TickCount. Cuando AfterLayerDraw es llamado para esriDPGeography conjunto de la EndTick con el medio Ambiente.TickCount y agregarlo a la lista.

Mirando en esta respuesta, yo diría que es mejor usar el Cronómetro de TickCount.

Agregar el LayerExtension a la capa a través de ILayerExtensions.Agregar método. No mantienen una fuerte referencia a la ILayer dentro de la layerextension.

Escribir un botón que permite añadir y borrar layerextensions de las capas en el mapa.

Escribir un botón que se repite a través de cada capa y las listas de promedio, max, min, etc. drawtimes para cada capa.

También he considerado la adición de otras propiedades para la layerextension para controlar cosas como la cpu, e/s de disco, etc. pero nunca llegó a hacerlo.

4voto

Berend Puntos 587

PerfQAnalyzer hace justamente eso. A través de esta página:

En la Primavera de de 2012 lanzamos la PerfQAnalyzer herramienta, que ayuda a los usuarios en la captura de procesar y editar veces dentro de ArcGIS for Desktop. Esta herramienta es gratuita, sin apoyo, herramienta descargable que ofrece a la comunidad de usuarios de Esri que se puede ejecutar desde dentro de ArcMap (como un add-in) o como un stand-alone de ArcGIS Engine aplicación. La mayoría de los usuarios encontrar el add-in de ArcMap, el más útil. Hemos recibido una gran respuesta con respecto a esta herramienta, y desde entonces han lanzado una nueva versión de la herramienta de la que ya está disponible para descargar. Las siguientes mejoras se han hecho para ayudar a los usuarios en la calibración de ArcGIS for Desktop rendimiento:

3voto

auramo Puntos 161

Por desgracia, parece que el ILayerExtensionDraw.BeforeLayerDraw y AfterLayerDraw eventos sólo son despedidos por la función y las capas de red (ver wguidry el post aquí) y necesito el apoyo de trama capas/mapa de los servicios de la imagen, mosaico datsets, etc.

Así, en pocas palabras esto es lo que terminamos haciendo. Gracias @Kirk de nuevo por las ideas!

Creado las siguientes clases:

  • Timing: Almacena el nombre de la capa, el sorteo de la fase y el tiempo transcurrido para un evento de dibujo
  • TimingSequence: Almacena todos los tiempos en una secuencia de dibujo
  • TimingSession: Almacena todas las secuencias de cronometraje en una de temporización de la sesión y gestiona la Stopwatch.

Una de temporización de la sesión se inicia y se detiene por un botón de alternar. Cuando el momento de la sesión se inicia puedo habilitar IViewManager.VerboseEvents y desactivarlo cuando el momento final de la sesión.

Yo reset y poner en marcha el Cronómetro en el inicio de una secuencia de dibujo, como se indica por IActiveViewEvents.ViewRefreshed y una instancia de un nuevo TimingSequence objeto.

Entonces, como cada capa sorteos para una fase específica, yo escucho IActiveViewEvents.AfterItemDraw, detener el Cronómetro, compruebe que ITrackCancel.Continue() devuelve true (false indica el dibujo fue cancelado) y registrar el nombre de la capa, la fase y el tiempo transcurrido en un nuevo Timing objeto y añadir a la actual TimingSequence, y restablecer/reiniciar el Cronómetro.

Yo sólo agregar una secuencia de tiempo para el tiempo de la sesión cuando IActiveViewEvents.AfterDraw de los incendios en la esriViewForeground fase (el último sorteo de la fase).

Cuando el usuario finaliza la temporización de la sesión alternando el botón de nuevo, me informe de los resultados (lo ideal sería algo más bonito que un feo MessageBox como es ahora). Parece estar funcionando sin problemas, aunque.

Problema: El AfterItemDraw evento sólo se parece al fuego de las capas en la raíz de la tabla de contenido, no anidados subcapas, así que si quieres mediciones individuales de una capa debe ser trasladado a la raíz de la TDC y no dentro de una capa de grupo. Ver vinculadas pregunta: ArcObjects: AfterItemDraw sólo se desencadena por capas en la raíz de TOC

2voto

tgmdbm Puntos 1115

Esri ha compatible agregar-en arcmap llamado PerfQAnalyzer. Se puede medir el sorteo de las diferentes capas, también tiene una característica de secuencias de comandos y se puede ejecutar en un modo independiente así.

http://blogs.esri.com/esri/supportcenter/2014/02/03/calibrating-arcgis-performance-with-perfqanalyzer-new-build-available-for-download/

2voto

UnkwnTech Puntos 21942

Creo que usted debe tratar mxdperfstat:

Una de ArcGIS Engine herramienta de línea de comandos para diagnosticar típico mxd rendimiento problemas.

Soporta ArcGIS 9.3, 10, 10.1, 10.2, 10.3 versiones.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X