2012-03-05 24 views
5

Cuando uso dotTrace, tengo que elegir un modo de perfil y un método de medición de tiempo. Profiling modes son:dotTrace: ¿qué configuración de perfil debo usar para mi aplicación de escritorio?

  • Tracing
  • línea por línea
  • muestreo

Y time measurement methods son:

  • tiempo de pared del tiempo (contador de rendimiento)
  • Tema
  • Tiempo de pared (instrucciones de la CPU)

El seguimiento y línea por línea no puede usar la medición del tiempo de hilo. Pero eso todavía me deja con siete combinaciones diferentes para probar. Ahora he leído las páginas de ayuda de dotTrace más de una docena de veces, y sigo sin saber más de lo que comencé sobre cuál elegir.

Estoy trabajando en una aplicación WPF que lee documentos de Word, extrae todos los párrafos y estilos, y luego recorre el contenido extraído para seleccionar las secciones del documento. Estoy tratando de optimizar este proceso. (Actualmente, lleva más de una hora completar, por lo que intento perfilarlo durante un período de tiempo determinado en lugar de hasta que termine).

¿Qué tipos de medición de tiempo y de perfiles me darían los mejores resultados? O si la respuesta es "depende", ¿de qué depende? ¿Cuáles son los pros y los contras de un determinado modo de perfil o método de medición de tiempo?

+1

Además, ¿cuándo se debe elegir "Alta precisión"? ¿Por qué * no * elegirías esto? – usr

Respuesta

6

tipos de perfiles:

  • muestreo: más rápido pero menos preciso del tipo de perfiles, sobrecarga mínima de perfiles. Esencialmente equivalente a pausar el programa muchas veces por segundo y ver el stacktrace; por lo tanto, el número de llamadas por método es aproximado. Sigue siendo útil para identificar cuellos de botella de rendimiento en el nivel de método.

    instantáneas capturadas en el modo de muestreo ocupan mucho menos espacio en el disco (yo diría que 5-6 menos espacio.) uso para la evaluación inicial o al perfilar una aplicación de larga duración (que suena como su caso.)

  • Seguimiento: Registra la duración de cada método. La aplicación bajo el perfil se ejecuta más lentamente, pero a cambio, dotTrace muestra el número exacto de llamadas de cada función, y la información de sincronización de funciones es más precisa. Esto es bueno para profundizar en los detalles de un problema a nivel de método.

  • línea por línea: Perfiles del programa en función de cada línea. El cerdo de recursos más grande, pero la mayoría de los resultados de perfiles de grano fino. Reduce el programa manera hacia abajo. La táctica preferida aquí es hacer un perfil inicial utilizando otro tipo, y luego seleccionar manualmente las funciones para el perfil línea por línea.


En cuanto a los tipos de medidores, creo que se describen bastante bien en Getting started with dotTrace Performance por el gran Hadi Hariri.

tiempo pared (Instrucción CPU): Esta es la forma más sencilla y rápida para medir el tiempo de la pared (es decir, el tiempo que observamos en un reloj de pared). Sin embargo, en algunos procesadores multinúcleo anteriores esto puede producir resultados incorrectos debido a que los temporizadores de los núcleos están desincronizados. Si este es el caso, se recomienda para usar el Contador de rendimiento.

pared del tiempo (contador de rendimiento): Los contadores de rendimiento es parte de la API de Windows y permite tomar muestras de tiempo de una manera independiente del hardware. Sin embargo, al ser una llamada API, cada medida toma tiempo considerable y, por lo tanto, tiene un impacto en la aplicación perfilada.

Tiempo de subproceso: en una aplicación de subprocesos múltiples, los subprocesos concurrentes contribuyen mutuamente al tiempo de muro. Para evitar dicha interferencia, podemos usar el medidor de tiempo de subprocesos que realiza las llamadas a la API del sistema para obtener el tiempo de otorgado por el planificador del sistema operativo a la secuencia. Las desventajas son que tomar muestras de tiempo de subproceso es mucho más lento que usar el contador de CPU y la precisión también está limitada por el tamaño de cuántica utilizada por el programador de subprocesos (normalmente 10ms). Este modo sólo se admite cuando la generación de perfiles Tipo de muestreo se establece en

Sin embargo, no difieren demasiado.


No soy un mago en perfiles de mí mismo, pero en tu caso me gustaría empezar con la toma de muestras para obtener una lista de las funciones que toman ridículamente largo de ejecutar, y luego me marcarlos para línea por perfil de línea.

+0

He mejorado esta pregunta para que pueda usarla como referencia para el futuro, siempre mezclo esos tiempos de pared. –

Cuestiones relacionadas