即使是具有简单窗口的最基本的应用程序也需要几秒钟的时间才能启动,而其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。另一个可能的问题:如果您的应用程序从冷状态开始有点慢,请确保它仅在开始时加载最小值。
答案 0 :(得分:2)
我在Windows 7上有一个简单的c#测试应用程序,可以立即启动,没有延迟。这是我在资源管理器中双击可执行文件的时候。从VisualStudio中需要几秒钟,因为VS会检查是否需要编译内容,可能需要一些调试等工具。
答案 1 :(得分:1)
Avast Antivirus还使用了一种名为“Deepscreen”的技术,可以在允许的文件被允许启动之前检查它们。我在Avast Exlusions设置屏幕中为我的VB.NET应用程序的路径添加了一个例外,它现在立即启动,没有任何异常延迟。