2012-07-06 27 views
3

即使是最简单的窗口最基本的应用程序也需要几秒钟的时间才能启动,而其等效的Win32等待时间在瞬间加载。为什么.Net应用程序启动较慢?

我读到延迟不是由于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。另一个可能的问题:如果您的应用程序从冷启动状态开始有点慢,请确保它仅在启动时加载最小值。

+1

你是如何运行应用程序,它是什么类型的应用程序?你有没有试过一个简单的控制台应用程序,从命令行运行(就像一个最小的测试)? – 2012-07-06 08:14:53

+1

您可以尝试使用[Process Monitor](http://technet.microsoft.com/zh-cn/sysinternals/bb896645.aspx)查看实际发生的情况,直至看到应用程序的UI。这将包括DLL加载,文件和/或网络访问等事件。 – 2012-07-06 08:15:27

+0

由于问题中显然存在冲突/不正确的信息,很难回答。谁告诉你最初的延迟不是由于JIT造成的? – 2012-07-06 08:21:38

回答

2

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

+0

同样在这里,虽然我有一个非常健壮的机器(SSD,四核i7)。 – 2012-07-06 08:15:49

+0

OT:本月刚刚安装了我的240Gb SSD 6G,我最说的是Visual Studio喜欢它:o) – balexandre 2012-07-06 08:17:53

+0

FWIW,我直接运行内置的Release二进制文件,而不是VB Express的IDE。 – Gulbahar 2012-07-06 08:45:28

1

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

+0

Avast是我的案子中的罪魁祸首。我有一个死亡的简单的.NET Windows窗体应用程序,每次打开25到30秒打开Avast,然后在将Avast设置为“禁用10分钟”后立即加载。 – 2015-02-09 22:31:58

相关问题