改进COM Interop冷启动

时间:2012-02-15 04:03:22

标签: .net vb6 com-interop

我们有一个VB6应用程序,可以在启动时启动我们的.NET代码。

在Windows XP计算机上冷启动大约需要22秒。在同一台机器上热启动约4秒钟。

冷启动时Windows Vista / 7大约需要5秒钟,热启动大约需要3秒钟。

基于以上所述,我假设延迟与磁盘访问有关,而且Vista / 7不受SuperFetch影响。

显然,我们需要提高XP的冷启动性能。我正在考虑创建一个在Windows启动时在系统托盘中运行的“热身”应用程序......但在我们付出努力之前,我想看看是否还有其他建议。

我已经尝试过我们的装配,这似乎没有任何区别。

添加一些跟踪代码后,我发现VB6代码跨越.NET边界只需要大约1秒......但.NET中的初始化代码大约需要20秒。它做了一些反思,我猜测延迟是从磁盘加载GAC组件......但我不能完全确定。

建议?

1 个答案:

答案 0 :(得分:2)

我会尝试以下方法:

  • 为.NET代码挑出.NET前端。看看它是否需要相同的时间。如果不是(我对此表示怀疑),那么问题就在于Interop。
  • 由于交叉在第二个内完成,我将分析.NET代码。下载Ants Profiler的试用版并查看问题所在。
  • 最后,抛出一些ProcMon操作来查看正在访问的文件 - 这可能会给你一些线索。

我不认为GAC库需要很长时间才能加载。我猜这段代码比你想象的要多一些。