.net - Office 2007 加载项首次加载时间较长

标签 .net vsto office-addins

我有 Office 2007 VSTO 加载项,它使用功能区 XML,等等。重启后首次启动Office时,比第二次启动时花费的时间要长得多。该加载项在安装期间使用 VSTO 包含列表注册为 vstolocal 并受信任。据我了解,这可以避免将其安装到 ClickOnce 中并验证发布者。

那么第一次启动时间长的可能原因是什么?你能给我一些想法吗?

最佳答案

我们有带有 VSTO 加载项的 Word,第一次启动需要 20-30 秒,第二次启动需要 6-7 秒。这适用于 Word 2007、.NET 3.5 和 Windows XP。没有加载项的 Word 冷启动大约需要 5 秒,热启动大约需要 2-3 秒。在我们的冷启动测试中,Word 是启动后第一个启动的应用程序,也是第一个使用任何 .NET 代码的应用程序。

与您一样,我们发现插件中代码的执行时间对加载时间没有明显影响。使用 VSTO 意味着必须加载和初始化 .NET Framework 和 VSTO Runtime。速度下降完全归因于从磁盘加载的开销和 .NET/VSTO 初始化的某种组合。

当然,第一个提出的“解决方案”是在登录期间不可见地启动 Word,然后终止 Word 进程,以预热磁盘缓存。当然,这只会使机器在启动期间多出 45 秒没有响应(我猜是因为它增加了磁盘争用)。但是,哇,在那之后 Word 启动得很快(只要它在登录后不久就启动了)。幸运的是,我们没有将此解决方案强加给我们的用户。

我们还编写了一个简单的 .NET 应用程序,它可以简单地启动、加载一些与我们的 Word 加载项相同的依赖项并退出。它也将在登录期间安排。Word 启动确实需要几秒钟,并增加登录时间的更多秒数,但是当一些用户在他们的期间甚至可能不使用 Word 时,进行这种权衡似乎毫无意义 session 。更无意义的是,如果他们确实想使用 Word 并且他们在桌面响应后立即启动 Word,那么 Word 最终将与本应为其铺平道路的自定义应用程序争夺资源!

我们的情况很复杂,因为我们还有 Word 模板 (VBA) 加载项。这些也占了启动时间的很大一部分,因为它是需要初始化的第二个运行时,并且需要从磁盘的某些分散区域加载更多文件。从只使用 Word,到只使用 VSTO 加载项的 Word 或只使用 VBA 加载项的 Word,再到同时使用 VBA 和 VSTO 加载项的 Word,冷启动时间呈非线性增加。也就是说,添加更多依赖项会增加总加载时间,然后是单个依赖项本身的加载时间。

我们还尝试了 COM shim 向导。使用 COM Shim 消除了 VSTO 运行时,但仍然允许您在加载项中安全地使用 .NET。转换我们的 VSTO 代码以使用生成的 COM Shim 并不难。这大大缩短了加载时间(我没有数字,我认为它使冷启动时间减半,但这是包含 VBA 加载项的情况)。我们理想的解决方案是使用 COM Shim 加载 .NET 插件,并将所有 VBA 代码迁移到 .NET。当突然提出这个解决方案时,冷启动时间并不是它所认为的大问题,而且优先级也大大降低了!

关于.net - Office 2007 加载项首次加载时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2920266/

相关文章:

c# - .NET Web 浏览器控件和 Dispose()

c# - VSTO Word 内容控制中的多行

.net - 使用.net SDK提交U-SQL作业

c# - 当范围很大时,VSTO 4 & C# NamedRange.RefersToRange 抛出 Com 异常

.net - Excel 对象模型的文档

c# - MailItem SaveAs() 方法文件类型

javascript - 仅从功能区打开一个对话框

javascript - 如何使用 Excel Javascript Addins 计算所有非空白单元格?

c# - 为国家、语言组合创建自定义 CultureInfo

.net - 如何通过窗口移动事件移动窗口?