4

即使是带有简单窗口的最基本应用程序也需要几秒钟才能启动,而其 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

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

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

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

谢谢你。


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

4

2 回答 2

2

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

于 2012-07-06T08:11:59.057 回答
1

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

于 2014-11-24T04:51:37.967 回答