在冷启动时加载加载项更快

时间:2012-05-18 11:08:34

标签: .net vsto

我们正在为Microsoft Word(2007& 2010)创建一个加载项。当我们在冷启动时启动加载项时,我们正面临延迟问题,这意味着机器已关闭并重新启动。然后Word的第一次启动大约需要30-35秒。随后的发布会更快。

我们认为这可能是由于将VSTO和.NET dll从磁盘加载到内存的延迟造成的。为了测试这一点,我们创建了一个虚拟的Word加载项,它根本不包含任何代码。在冷启动时,只加载了这个加载项,Word需要大约17秒才能启动。

我们可以以某种方式加快这个过程吗?如果有任何技术可以使VSTO和.NET dll加载速度更快,那么将非常感激。

2 个答案:

答案 0 :(得分:2)

  

为了测试这一点,我们创建了一个虚拟的Word加载项,它根本不包含任何代码。

这不是对你的理论的有效测试。即使是根本不包含代码的加载项,也需要加载.NET Framework支持DLL。

当您添加实际加载项的附加依赖项时,这就解释了为什么您看到所需的加载时间加倍(从17秒到35秒)。

这是.NET解决方案的一个已知“问题” - 如果尚未加载.NET运行时环境,则第一次启动它们的速度相对较慢。随后的启动时间要快得多。

除了running NGEN over your assembly之外,你对此无能为力。这可能有助于冷启动时间,但它有其他后果,因此我不建议将其作为一个简单的事情。我的建议只是习惯于减慢冷启动或切换到不同的技术。

答案 1 :(得分:2)

有2个注册表项可能会影响加载项的加载时间:LoadBehaviorWarmup。阅读他们here

将LoadBehavior设置为9(按需加载),以便加载项在首次使用时加载,而不是在Word启动时加载,从而减少Word的启动时间。

将预热设置为1可能会有所帮助。这将导致.NET框架和VSTO运行时在加载项之前加载,以“减少加载加载项的感知时间”。 (就我个人而言,我不确定这有多大影响。无论如何,我的加载项加载速度非常快,所以我没有看到使用此设置的提升。)

总的来说,加载项需要很长时间才能加载,这很奇怪。我建议仔细查看加载加载项时运行的代码(构造函数,加载事件等)。