我们有一个VB6应用程序,可以在启动时启动我们的.NET代码。改进COM Interop Cold Start
冷启动在Windows XP机器上需要持续约22秒。同一台机器上的热启动约为4秒钟。
对于冷启动,Windows Vista/7大约需要5秒,对于热启动大约需要3秒。
基于以上所述,我假设延迟是与磁盘访问相关的,并且由于SuperFetch,Vista/7不受影响。
显然,我们需要提高XP的冷启动性能。我正在考虑创建一个在Windows启动时在系统托盘中运行的“热身”应用程序......但在我们花费精力之前,我想查看是否还有其他建议。
我已经试过ngen'ing我们的程序集,似乎没有任何区别。
在添加了一些跟踪代码后,我发现VB6代码只需要1秒左右就可以跨越.NET边界......但.NET中的初始化代码大约需要20秒。它做了一些反思,我猜想延迟是从磁盘加载GAC程序集......但我不能完全确定。
对此提出建议?
[.NET JIT编译的代码是否被缓存了?在哪里?](http://stackoverflow.com/questions/3295622/is-the-net-jit-compiled-code-cached-where) – 2012-02-15 05:07:07
你确定没有简单的东西你运行在较新的机器(s ),它使用CLR并在启动或登录时有效地“预加载”它?我知道,自从ATI收购了与视频适配器相关的Catalyst品牌软件之后,其他供应商也可能会这样做。 – Bob77 2012-02-15 05:41:29
是不是什么闪屏:) – tcarvin 2012-02-15 15:25:38