【问题标题】:Why is my application startup time slower when I use Process.Start()?当我使用 Process.Start() 时,为什么我的应用程序启动时间变慢了?
【发布时间】:2010-08-27 01:33:19
【问题描述】:

我正在尝试分析我的应用程序的启动时间,因此我编写了一个小型 C# 程序,它将使用 Process.Start() 方法启动我的应用程序,并使用秒表计时。

当我尝试自己启动应用程序(只需单击它)时,可能需要 2-3 秒。当我尝试使用我的测试程序启动应用程序时,需要 8-10 秒。启动时间在这个量级上始终不同。

知道为什么使用 Process.Start 启动可执行文件会对启动时间产生如此大的影响吗?

【问题讨论】:

  • 你是在调试器下运行的吗?还是处于发布模式?你是在 Visual Studio 中启动它还是在命令行上启动它?
  • 我在发布模式下运行它,并从命令行运行

标签: c# app-startup


【解决方案1】:

感谢您的所有帮助。我有答案,它与 Process.Start 无关。

在我开始这个过程之后,我正在等待一个特定的窗口句柄出现,以知道该应用程序实际出现了。环太紧了。我在while循环中引入了200ms的睡眠,启动时间又正常了。

【讨论】:

  • dreadpirateriyan,请选择这个作为答案,即使是你自己帮助别人更快地找到这个。
【解决方案2】:

您的线索应该是 Process.Start()System.Diagnostics 命名空间中。当您以这种方式启动一个流程时,您将为其附加一堆监视器/检查器。这肯定会增加开销。

您可能希望在启动 Process 对象后立即尝试在 Dispose() 上调用它(以避免不必要地延长进程监控),但您将无法完全避免相关的开销。

【讨论】:

  • 我在文档中没有看到有关使用 Process.Start 的任何内容,从而导致生成的应用程序的运行时性能变慢。你有任何链接吗?我有兴趣阅读。
【解决方案3】:

简单地说,您实际上是在启动两个进程,而不仅仅是一个进程。这就是为什么需要更长的时间。

当您双击您的应用程序时,您只加载了一个应用程序,而且它都是 DLL。

当您运行诊断应用程序时,您首先会加载第一个应用程序,其中包含必须 JIT 的 .NET 程序集(即时编译:这不是免费的)。只有在这一切都完成之后,才能启动其他应用程序。如果您的目标应用程序也是一个 .NET 应用程序,那么整个循环就会重复。

【讨论】:

  • 他用秒表计时,所以大概他只测量进程的启动时间,而不是他的测试应用程序的启动时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
相关资源
最近更新 更多