c++ - tools - herramientas de diagnostico visual studio
Perfilador decente para Windows? (9)
Para Windows, consulte el Xperf gratuito que se incluye con el SDK de Windows. Utiliza un perfil muestreado, tiene una IU útil y no requiere instrumentación. Muy útil para rastrear problemas de rendimiento. Puede responder preguntas como:
¿Quién usa la mayor cantidad de CPU? Desplácese hasta el nombre de la función usando pilas de llamadas.
¿Quién está asignando la mayor cantidad de memoria?
Excepcionales asignaciones de memoria (fugas)
¿Quién está haciendo la mayoría de las consultas de registro?
¿Escritura en disco? etc.
Esta pregunta ya tiene una respuesta aquí:
¿Windows tiene algún perfilador decente (por ejemplo, sin instrumentos) disponible? Preferiblemente algo parecido a Shark en MacOS, aunque estoy dispuesto a aceptar que voy a tener que pagar por ese perfil en Windows.
Probé el generador de perfiles en VS Team Suite y no quedé demasiado impresionado, y me preguntaba si habría otros buenos.
[Editar: Erk, me olvidé de decir que esto es para C / C ++, en lugar de .NET - lo siento por cualquier confusión]
He intentado con Intel vtune con un proyecto bastante grande hace unos dos años. Fue un generador de perfiles de instrumentación y me tomó tanto tiempo instrumentar el DLL que estaba tratando de perfilar que finalmente perdí la paciencia después de una hora.
La única herramienta que he tenido bastante éxito y que recomiendo mucho es la de AQTime . No solo proporciona excelentes recursos de creación de perfiles de rendimiento, sino que también proporciona un excelente perfil de memoria que me ha ayudado mucho a rastrear las pérdidas de memoria.
No estoy seguro de lo que es un perfilador no instrumental, pero puedo decir que para .NET me encanta el Analizador de ANTS de RedGate. La versión 3 supera a la versión MS por su facilidad de uso y la versión 4, que permite cortes de tiempo arbitrarios, hace que MS parezca una broma.
Intel VTune es bueno y no es instrumental. Evaluamos una gran cantidad de perfiladores para Windows, y esto fue lo mejor para trabajar con código de controlador (aunque también hace código de nivel de usuario no administrado). Una ventaja particular es que lee todos los contadores de rendimiento del procesador Intel, por lo que puede obtener una buena comprensión de por qué su código se ejecuta lentamente, y fue útil para poner instrucciones de captación previa en nuestro código y ordenar el diseño de datos para que funcione bien con el líneas de caché, y la manera en que las líneas de caché se invalidan en sistemas multi-núcleo.
Es comercial, y debo decir que no es la interfaz de usuario más fácil del mundo.
Usamos VTune y AQTime, y puedo responder por ambos. Lo que funciona mejor para usted depende de sus necesidades. Ambos tienen versiones de prueba gratuitas. Sugiero que les des una oportunidad.
El Kit de controladores de Windows incluye un perfilador de muestreo de usuario / kernel no instrumentado llamado "Kernrate" . Parece útil para perfilar aplicaciones multiproceso, aplicaciones que pasan la mayor parte de su tiempo en el kernel y controladores de dispositivos (por supuesto). También está disponible en los paquetes KrView (Kernrate Viewer) y Windows Server 2003 Resource Kit Tools .
Kernrate funciona en Windows 2000 y posterior (a diferencia de Xperf, que requiere Vista / Server 2008). Está basado en línea de comandos y la documentación tiene una lista de opciones algo intimidante. No estoy seguro de si puede grabar pilas de llamadas o solo el contador del programa. Si utiliza un servidor de símbolos, asegúrese de poner un dbghelp.dll
actualizado y symsrv.dll
en el mismo directorio que kernrate.exe
para evitar que use la versión antigua de dbghelp.dll
que está instalada en %SystemRoot%/system32
.
Sé que estoy agregando mi respuesta meses después de que se hizo esta pregunta, pero pensé que señalaría un perfilador de código abierto decente: Very Sleepy .
No tiene el recuento de características que hacen algunos de los otros perfiladores antes mencionados, pero es un perfilador de muestreo bastante respetable que funcionará muy bien en la mayoría de las situaciones.
Luke Stackwalker parece prometedor: no es tan brillante como me gustaría, pero es de código abierto y hace algo que parece muy parecido a lo que @Mike Dunlavey sigue diciendo que deberíamos hacer. (Por supuesto, luego trata de convertirlo todo en los típicos gráficos de llamadas inútiles de los que Mike está tan cansado, pero no debería ser demasiado difícil arreglar eso con la fuente como nuestro aliado).
Incluso parece contar el tiempo que se pasa esperando en el kernel, por lo que puedo decir ...
El CodeAnalyst de AMD es GRATIS aquí