2010-08-27 9 views
6

Estoy tratando de perfilar el tiempo de inicio de mi aplicación, así que escribí un pequeño programa de C# que iniciará mi aplicación utilizando el método Process.Start(), y la hora usando un cronómetro.¿Por qué el tiempo de inicio de mi aplicación es más lento cuando uso Process.Start()?

Cuando intento iniciar la aplicación yo mismo (simplemente haciendo clic en ella), probablemente demore 2-3 segundos. Cuando intento iniciar la aplicación usando mi programa de prueba, demora entre 8 y 10 segundos. El tiempo de inicio consistentemente difiere en esa magnitud.

¿Alguna idea de por qué usar Process.Start para iniciar un ejecutable afectaría tanto los tiempos de inicio?

+0

¿Lo está ejecutando bajo el depurador? ¿O en modo de lanzamiento? ¿Lo está comenzando en el estudio visual o en la línea de comando? –

+0

Lo estoy ejecutando en modo Release, y desde la línea de comandos – dreadpirateryan

Respuesta

1

Gracias por toda su ayuda. Tengo la respuesta, y no está relacionada con Process.Start.

Después de iniciar el proceso, estaba esperando que apareciera el identificador de ventana específico para saber que la aplicación realmente apareció. El bucle era demasiado apretado. Introduje un sueño de 200 ms en el ciclo while, y el tiempo de inicio era normal otra vez.

+0

dreadpirateriyan, seleccione esto como respuesta, incluso si es de usted mismo para ayudar a otros a encontrar esto más rápido. – Marcel

0

Su pista debe ser que Process.Start() está en el espacio de nombres System.Diagnostics. Cuando comienzas un proceso de esta manera, estás adjuntando un grupo de monitores/inspectores. Esto definitivamente agrega una sobrecarga.

Es posible que desee para tratar de inmediato llamando Dispose() en el objeto Process después de empezar a él (con el fin de evitar la supervisión de procesos prolongada innecesariamente-), pero usted no será capaz de evitar por completo los gastos generales asociados.

+0

no veo nada en la documentación sobre el uso de Process.Start que da como resultado un rendimiento de ejecución más lento para la aplicación generada. ¿Tienes algún enlace? Me interesaría leer sobre eso. –

0

En pocas palabras, está comenzando realmente dos procesos, no solo uno. Es por eso que toma más tiempo.

Cuando hace doble clic en su aplicación, está cargando solo una aplicación y todas sus DLL.

Cuando ejecuta su aplicación de diagnóstico, primero está cargando la primera aplicación con sus ensamblajes .NET que deben estar JIT (compilación Just in time: que no es gratuita). Solo después de que todo haya terminado, la aplicación OTHER comenzará a funcionar. Si su aplicación de destino también es una aplicación .NET, entonces todo el ciclo se repite.

+1

Lo está cronometrando con un cronómetro, por lo que presumiblemente solo mide el tiempo de inicio del proceso y no el tiempo de inicio de su aplicación de prueba. –

Cuestiones relacionadas