【问题标题】:How to measure the time an application takes to start up in C#?如何测量应用程序在 C# 中启动所需的时间?
【发布时间】:2011-04-22 06:13:56
【问题描述】:

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

我想编写一个 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);

如何获得我想要的启动时间?

【问题讨论】:

  • 首先,您可以使用 StopWatch 类 msdn.microsoft.com/en-us/library/… 而不是 DateTime。至于开始时间,是否允许更改测试应用的代码?
  • 没有。我无法更改要测试的应用程序的代码。但如果可以的话,你有什么建议?

标签: c# .net performance-testing


【解决方案1】:

我说这很难。

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

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

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

【讨论】:

  • 要计时的应用是外部的。
  • 那么你可能需要研究这个外部应用程序是否可以在它准备好/加载时向你发出信号。你确定你真的想要这个外部依赖吗?
【解决方案2】:

Process.WaitForInputIdle() 响应主窗口。一旦该过程启动,它将继续进行。您可以查看的主窗口上是否有一条消息表明该应用程序处于就绪状态?如果是这样,您可以尝试将或应用程序放入存在或已经过去很长时间的循环单元中。如前所述,您可能还希望查看 Stopwatch 类以了解您的时间。

在您执行此操作时,还有其他一些想法。确保此进程是唯一正在运行的进程。否则,有时您可能会遇到一些冲突。您可能需要弄清楚当应用程序完全加载时触发器会告诉您什么。

【讨论】:

    猜你喜欢
    • 2016-09-14
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多