【问题标题】:Load Add-In faster on cold boot冷启动时加载加载项更快
【发布时间】:2012-05-18 23:23:38
【问题描述】:

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

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

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

【问题讨论】:

  • 您的加载项是否有很多外部依赖项?是否有很多正在运行的代码可以放在后台线程上?

标签: .net vsto


【解决方案1】:

为了对此进行测试,我们创建了一个完全不包含任何代码的虚拟 Word 插件。

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

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

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

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

【讨论】:

  • 是的,我们在启动时确实有很多代码。我们正在努力寻找加速它的技术。我的意思是如何让这 17 秒的加载 .NET dll 加载消失。也许创建一个虚拟的 .net 应用程序并将其放入 Startup。但这似乎只是转移了我们插件的注意力,而且有些人可能称之为邪恶。 :)
  • @Mayank 这就是重点,你不能。必须先加载 .NET Framework,然后才能使用它。冷启动需要一段时间,但它只需要发生一次。这不是您可以“解决”的问题。如果您无法使用它,则需要切换技术。是的,启动时运行的虚拟应用程序就是邪恶的定义。
  • 感谢您的澄清。我们目前无法转换技术。所以我想我们只能忍受延迟(或作恶)。
【解决方案2】:

有 2 个注册表项会影响加载项的加载时间:LoadBehaviorWarmup。了解他们here

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

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

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

【讨论】:

  • 更改 LoadBehavior 时要小心!最近我的加载项在使用“按需加载”时停止工作。将其更改回“启动时加载”解决了问题。我不确定这是否是由于最近的 Office 更新所致。
猜你喜欢
  • 2017-03-10
  • 1970-01-01
  • 2022-01-21
  • 2010-09-19
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
相关资源
最近更新 更多