2010-10-07 115 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()阶跃响应到主窗口。一旦这个过程启动,它将继续前进。在主窗口的主窗口上是否有消息表明应用程序处于就绪状态?如果是这样的话,你可以尝试在一个循环单元中放置或应用程序,这个循环单元是存在的或者已经有很多时间了如前所述,您可能还想看看秒表课程的时间。

当你这样做时,还有其他一些想法。确保这个过程是唯一正在运行的过程。否则有时可能会发生一些冲突。您可能需要在确定应用程序完全加载时触发器告诉您的情况下进行周围游戏。