【问题标题】:Why are .Net applications slower to start?为什么 .Net 应用程序启动速度较慢?
【发布时间】:2023-04-02 18:25:02
【问题描述】:

即使是带有简单窗口的最基本应用程序也需要几秒钟才能启动,而其 Win32 等效应用程序会在瞬间加载。

我读到延迟不是由于 JIT 将操作码转换为机器码所花费的时间,而是由于 Windows 加载 .Net 框架所花费的时间。

所以,使用 MS 的 tasklist.exe CLI 应用程序,我检查了 mscoree.dll 是否已经加载:

C:\>tasklist /m mscoree.dll

Image Name                   PID Modules
========================= ====== =====================
explorer.exe                 368 mscoree.dll
BSQLServer.exe               652 mscoree.dll
TOTALCMD.EXE                 408 mscoree.dll
Uedit32.exe                  260 mscoree.dll
OUTLOOK.EXE                 1912 mscoree.dll

接下来,我只用一个确定按钮运行了我的基本应用程序,但仍然需要几秒钟才能显示出来。

假设 mscoree.dll 确实是 .Net 已加载的证据,至少可以处理基本的 Windows,那么为什么会延迟? FWIW,它在 XPSP3 主机上。

即使为每个进程加载了整个 .Net 框架,因为它已经为其他进程启动并运行,我假设它只会从 RAM 中的其他进程复制代码?

谢谢。


编辑:似乎较慢的初始启动时间是由于使用了防病毒/防火墙应用程序,而不是由于 JIT 或加载 .Net。另一个可能的问题:如果您的应用从冷状态启动有点慢,请确保它仅在启动时加载最低限度。

【问题讨论】:

  • 你是如何运行这个应用的,它是什么类型的应用?您是否尝试过从命令行运行的简单控制台应用程序(仅作为最小测试)?
  • 您可以尝试使用Process Monitor 来查看实际发生的情况,直到您看到应用程序的 UI。这将包括 DLL 加载、文件和/或网络访问等事件。
  • 由于问题中明显冲突/不正确的信息而难以回答。谁告诉你最初的延迟不是 JIT 造成的?
  • 只需检查您是否已在发布模式下编译应用程序
  • 它只是一个带有 OK 按钮的窗口,它是 Release 二进制文件。我在几个地方读到过,包括在 MS 自己的网站上,JIT 非常快,所以启动时间较慢主要是由于其他因素。这是否意味着 .Net 应用程序可以像 Win32 应用程序一样快速启动,即使在 JIT + 加载 .Net 的情况下也是如此?

标签: .net vb.net


【解决方案1】:

我在 Windows 7 上有一个简单的 c# 测试应用程序,它可以立即启动,没有延迟。这是我在资源管理器中双击可执行文件的时候。在 VisualStudio 中,这需要几秒钟,因为 VS 会检查是否需要编译东西,可能会进行一些检测以进行调试等。

【讨论】:

  • 这里也一样,虽然我有一台非常强大的机器(SSD,四核 i7)。
  • OT:本月刚安装了我的 240Gb SSD 6G,我最想说的是,Visual Studio 喜欢它:o)
  • FWIW,我直接运行了构建的 Release 二进制文件,而不是从 VB Express 的 IDE 中运行。
  • 可能是 .NET 正在做一些安全或其他事情,例如使用域控制器检查用户权限。不确定,但可能会暂时禁用网络(拔掉插头;-),看看是否有区别。
  • 感谢您的提示。事实上,较慢的初始启动时间似乎是由于我使用的 AV(Comodo,但其他人可能会导致同样的问题):将其关闭,等待几分钟,然后再次启动 .Net 应用程序显示启动时间较慢;不久后关闭并重新启动它不会显示任何延迟。
【解决方案2】:

Avast Antivirus 还使用一种称为“Deepscreen”的技术,该技术在可执行文件被允许启动之前对其进行检查。我在 Avast Exlusions 设置屏幕中为我的 VB.NET 应用程序的路径添加了一个例外,它现在立即启动,没有任何异常延迟。

【讨论】:

  • Avast 显然是我的罪魁祸首。我有一个非常简单的 .NET Windows Forms 应用程序,每次打开都需要 25 到 30 秒,启用 Avast,然后在我将 Avast 设置为“禁用 10 分钟”后立即加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多