4

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

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

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

4

2 回答 2

2

有 2 个注册表项会影响加载项的加载时间:LoadBehaviorWarmup. 在这里阅读它们。

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

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

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

于 2012-05-18T15:23:38.993 回答
2

为了测试这一点,我们创建了一个完全不包含代码的虚拟 Word 加载项。

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

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

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

除了在您的程序集上运行 NGEN之外,您对此无能为力。这可能会对冷启动时间有所帮助,但它会产生其他后果,所以我当然不会推荐它作为一个简单的事情。我的建议只是习惯于缓慢的冷启动或切换到不同的技术。

于 2012-05-18T11:17:17.070 回答