2010-10-07 113 views
1

我有一個GUI應用程序需要一段時間才能加載它的所有插件,然後準備好被用戶使用。如何測量應用程序在C#中啓動的時間?

我想寫會採取措施爲這個應用程序啓動時的C#程序。我認爲Process.WaitForInputIdle()方法可以做到這一點,但事實並非如此。只要過程開始,它就會退出。

我現在是這樣的:

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); 

如何我可以得到我想要的啓動時間?

+2

對於開始你可以使用秒錶類,http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx代替日期時間。至於開始時間,您是否允許更改測試應用程序的代碼? – 2010-10-07 09:02:55

+0

不,我不能更改我想測試的應用程序的代碼。但是如果我可以的話,你在暗示什麼? – Poulo 2010-10-07 09:21:31

回答

2

我說這很困難。

如何分類已加載和準備好的應用程序?如果有一種方式(我不這麼認爲),那很簡單。

但是,如果你的應用程序加載的信號,你在某些方式(IPC /文件/網絡),那麼你就可以捕獲信號,並說該應用程序被加載。在這種情況下,您可以使用計時器/秒錶/性能計數器。

如果你可以修改被計時的應用程序,那麼你就可以以各種方式實現。如果它在你的外部,我懷疑是否有任何簡單的方法。

+0

要定時的應用程序是外部的。 – Poulo 2010-10-07 09:23:02

+0

然後,您可能需要研究此外部應用程序是否可以在準備好/加載時發出信號。你確定你真的想要這個外部依賴嗎? – Nayan 2010-10-07 09:50:27

0

Process.WaitForInputIdle()階躍響應到主窗口。一旦這個過程啓動,它將繼續前進。在主窗口的主窗口上是否有消息表明應用程序處於就緒狀態?如果是這樣的話,你可以嘗試在一個循環單元中放置或應用程序,這個循環單元是存在的或者已經有很多時間瞭如前所述,您可能還想看看秒錶課程的時間。

當你這樣做時,還有其他一些想法。確保這個過程是唯一正在運行的過程。否則有時可能會發生一些衝突。您可能需要在確定應用程序完全加載時觸發器告訴您的情況下進行周圍遊戲。