2010-10-07 14 views
1

J'ai une application graphique qui prend un certain temps pour charger tous ses plugins, avant qu'il ne soit prêt à être utilisé par l'utilisateur.Comment mesurer le temps nécessaire au démarrage d'une application en C#?

Je veux écrire un programme C# qui mesure le temps nécessaire pour cette application pour démarrer. Je pensais que la méthode Process.WaitForInputIdle() ferait l'affaire, mais ce n'est pas le cas. Il se ferme dès que le processus est démarré.

Ce que j'ai maintenant ceci:

DateTime startTime = DateTime.Now; 

Process myAppUnderTest = Process.Start("C:\\Program Files\\My App\app_under_test.ext"); 

myAppUnderTest.WaitForInputIdle(); //Wait until the application is idle. 

DateTime endTime = DateTime.Now; 

int elapsedTimeInSecs = endTime.Subtract(startTime).Seconds; 

Console.WriteLine("Start up time (sec): {0}", elapsedTimeInSecs); 

Comment puis-je obtenir le temps de démarrage que je compte?

+2

Pour commencer, vous pouvez utiliser la classe StopWatch, http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx au lieu de DateTime. En ce qui concerne l'heure de début, êtes-vous autorisé à changer le code de l'application de test? –

+0

Non. Je ne peux pas changer le code de l'application que je veux tester. Mais si je pouvais, que suggérez-vous? – Poulo

Répondre

2

Je dis que c'est très difficile.

Comment classer une application chargée et prête? S'il y a un moyen (ce que je ne pense pas) alors ce serait facile.

Mais si l'application vous des signaux que vous chargez d'une certaine manière (IPC/fichiers/réseau), vous pouvez capturer ce signal et dire que l'application est chargée. Dans ce cas, vous pouvez utiliser une minuterie/un chronomètre/un compteur de performance.

Si vous pouvez modifier l'être chronométré application, vous pouvez réaliser de différentes façons. Si c'est extérieur à vous, je doute qu'il y ait un moyen facile.

+0

L'application à programmer est externe. – Poulo

+0

Ensuite, vous devrez peut-être étudier si cette application externe peut vous signaler quand elle est prête/chargée. Êtes-vous sûr de vouloir vraiment cette dépendance externe? – Nayan

0

Process.WaitForInputIdle() respones à la fenêtre principale. Une fois que le processus démarre, il va continuer. Y at-il un message sur la fenêtre principale que vous pouvez regarder qui indique que l'application est dans un état prêt? Si c'est le cas, vous pouvez essayer de mettre ou app dans une boucle unitl qui est présent ou si beaucoup de temps s'est écoulé. Comme il a été noté, vous voudrez probablement aussi regarder la classe Stopwatch pour votre timing.

Juste quelques autres pensées que vous faites cela. Assurez-vous que ce processus est le seul en cours d'exécution. Vous pouvez parfois avoir des conflits autrement. Vous devrez peut-être jouer à jouer avec déterminer ce que le déclencheur est de vous dire quand l'application est entièrement chargée.