我正在尝试分析我的应用程序的启动时间,因此我编写了一个小型 C# 程序,它将使用 Process.Start() 方法启动我的应用程序,并使用秒表计时。
当我尝试自己启动应用程序时(只需单击它),可能需要 2-3 秒。当我尝试使用我的测试程序启动应用程序时,需要 8-10 秒。启动时间在这个量级上始终不同。
知道为什么使用 Process.Start 启动可执行文件会如此影响启动时间吗?
我正在尝试分析我的应用程序的启动时间,因此我编写了一个小型 C# 程序,它将使用 Process.Start() 方法启动我的应用程序,并使用秒表计时。
当我尝试自己启动应用程序时(只需单击它),可能需要 2-3 秒。当我尝试使用我的测试程序启动应用程序时,需要 8-10 秒。启动时间在这个量级上始终不同。
知道为什么使用 Process.Start 启动可执行文件会如此影响启动时间吗?
感谢你的帮助。我有答案,它与 Process.Start 无关。
在我开始这个过程之后,我正在等待一个特定的窗口句柄出现,以知道该应用程序实际出现了。环太紧了。我在while循环中引入了200毫秒的睡眠,启动时间又正常了。
您的线索应该Process.Start()
是在System.Diagnostics
名称空间中。当您以这种方式启动一个流程时,您将为其附加一堆监视器/检查器。这肯定会增加开销。
Dispose()
您可能想在启动对象后立即尝试调用Process
它(以避免不必要地延长进程监视),但您将无法完全避免相关的开销。
简而言之,您实际上正在启动两个过程,而不仅仅是一个过程。这就是为什么它需要更长的时间。
当您双击您的应用程序时,您只加载了一个应用程序,并且所有它都是 DLL。
当您运行您的诊断应用程序时,您首先加载第一个应用程序,其中包含必须是 JIT 的 .NET 程序集(即时编译:这不是免费的)。只有在这一切都完成之后,才能启动其他应用程序。如果您的目标应用程序也是一个 .NET 应用程序,那么整个循环就会重复。