2010-08-27 2 views
6

Ich versuche, die Startzeit meiner Anwendung zu profilieren, also schrieb ich ein kleines C# -Programm, das meine Anwendung mit der Process.Start() -Methode startet, und die Zeit mit einer Stoppuhr.Warum dauert die Startzeit meiner Anwendung langsamer, wenn ich Process.Start() verwende?

Wenn ich versuche, die Anwendung selbst zu starten (indem ich einfach darauf klicke), dauert es wahrscheinlich 2-3 Sekunden. Wenn ich versuche, die Anwendung mit meinem Testprogramm zu starten, dauert es 8-10 Sekunden. Die Startzeit unterscheidet sich in dieser Größenordnung durchweg.

Jede Idee, warum die Verwendung von Process.Start zum Starten einer ausführbaren Datei die Startzeiten so stark beeinflusst?

+0

führen Sie es unter dem Debugger? Oder im Freigabemodus? Starten Sie es in Visual Studio oder in der Befehlszeile? –

+0

Ich führe es im Freigabemodus, und von der Befehlszeile – dreadpirateryan

Antwort

1

Vielen Dank für Ihre Hilfe. Ich habe die Antwort und es hat nichts mit Process.Start zu tun.

Nachdem ich den Prozess gestartet habe, wartete ich auf einen bestimmten Fenstergriff, um zu wissen, dass die App tatsächlich angezeigt wurde. Die Schleife war zu eng. Ich führte in der while-Schleife einen Schlaf von 200 ms ein und die Startzeit war wieder normal.

+0

dreadpirateriyan, bitte wählen Sie dies als Antwort, auch wenn es von Ihnen selbst ist, anderen zu helfen, dies schneller zu finden. – Marcel

0

Ihr Hinweis sollte sein, dass im Namespace System.Diagnostics ist. Wenn Sie einen Prozess auf diese Weise starten, fügen Sie eine Reihe von Monitoren/Inspektoren hinzu. Dies fügt definitiv einen Overhead hinzu.

Sie können versuchen, sofort Dispose() auf dem Process Objekt zu starten, nachdem Sie es starten (um unnötig lange Prozessüberwachung zu vermeiden), aber Sie können die damit verbundenen Gemeinkosten nicht vollständig vermeiden.

+0

sehe ich nichts in der Dokumentation über die Verwendung von Process.Start, was zu einer langsameren Laufzeitleistung für die erzeugte Anwendung führt. Hast du irgendwelche Links? Ich wäre daran interessiert, das zu lesen. –

0

Einfach gesagt, Sie starten eigentlich zwei Prozesse, nicht nur eine. Deshalb dauert es länger.

Wenn Sie auf Ihre Anwendung doppelklicken, laden Sie nur eine Anwendung und alle ihre DLLs.

Wenn Sie Ihre Diagnose-App ausführen, laden Sie zuerst die erste Anwendung mit ihren .NET-Assemblies, die JIT'd sein müssen (Just-in-Time-Compilierung: die ist nicht kostenlos). Erst danach ist alles erledigt, dann startet die ANDERE Anwendung. Wenn Ihre Ziel-App auch eine .NET-App ist, wiederholt sich der gesamte Zyklus.

+1

Er misst es mit einer Stoppuhr, also misst er vermutlich nur die Startzeit des Prozesses und nicht die Startzeit seiner Test-App. –

Verwandte Themen