如何测量应用程序在C#中启动所需的时间?

如何测量应用程序在C#中启动所需的时间?,c#,.net,performance-testing,C#,.net,Performance Testing,我有一个GUI应用程序,它需要一段时间来加载所有插件,然后才能供用户使用 我想写一个C#程序来测量这个应用程序启动所需的时间。我原以为Process.waitForInputdle()方法可以做到这一点,但事实并非如此。进程一启动,它就退出 我现在得到的是: DateTime startTime = DateTime.Now; Process myAppUnderTest = Process.Start("C:\\Program Files\\My App\app_under_test.ext

我有一个GUI应用程序,它需要一段时间来加载所有插件,然后才能供用户使用

我想写一个C#程序来测量这个应用程序启动所需的时间。我原以为Process.waitForInputdle()方法可以做到这一点,但事实并非如此。进程一启动,它就退出

我现在得到的是:

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

我怎样才能得到我想要的启动时间呢?

我说这很难

如何对已加载并准备就绪的应用程序进行分类?如果有一种方法(我不这么认为),那就很容易了

但是,如果你正在加载的应用程序以某种方式(IPC/文件/网络)向你发出信号,那么你可以捕获该信号并说该应用程序已加载。在这种情况下,您可以使用计时器/秒表/性能计数器

如果您可以修改要计时的应用程序,那么您可以通过多种方式实现。如果它对您来说是外部的,我怀疑有什么简单的方法。

Process.WaitForInputIdle()响应主窗口。一旦这个过程开始,它就会继续。主窗口上是否有一条消息,表明应用程序处于就绪状态?如果是这样,您可以尝试将或应用程序放在一个循环单元中,该循环单元存在或已经过了很多时间。如前所述,您可能还想了解秒表课程中的计时


在你做这件事的时候,还有一些其他的想法。确保此进程是唯一正在运行的进程。否则,有时会出现一些冲突。你可能需要弄清楚当应用程序完全加载时,触发器会告诉你什么。

对于start,你可以使用秒表类,而不是DateTime。至于开始时间,是否允许您更改测试应用程序的代码?否。我无法更改我要测试的应用程序的代码。但是如果我可以,你有什么建议?待计时的应用程序是外部的。然后你可能需要研究是否有任何方式可以在外部应用程序准备好/加载时向你发出信号。你确定你真的想要这个外部依赖关系吗?