C# VSTO - 缓慢加载 Outlook 加载项(由 Ribbon.xml 引起?)

C# VSTO - Slowly loading Outlook Add-in (caused by Ribbon.xml?)

我开发了一个 Microsoft Outlook 加载项,用于向我们的 IT 安全团队报告可疑电子邮件。加载项基本上由一个按钮组成,该按钮显示在“Outlook 邮件资源管理器功能区”、“Outlook 邮件阅读功能区”和右键单击任何电子邮件时打开的上下文菜单。加载项只是将任何选定的电子邮件转发到我们 IT Sec 的邮箱 spam/phishing/... 加载项本身按预期运行,我只有加载时间有问题(无论何时启动 Outlook,不仅是在安装后首次启动时)。

我从这个 SO answer 中获取了很多关于 Ribbon Designer VS XML 的信息(谢谢老兄!)。我决定选择 Ribbon XML,因为它能够操纵上下文菜单,而且设计它的方式简单明了。此外,我创建了一个 Windows 安装程序,用于在系统范围内安装插件(请参阅下面的信息)。

在我的私人 PC 上开发此插件时,我的加载时间“正常”并且插件没有问题。但是,我公司的笔记本电脑加载时间非常长。 Outlook 本身指出由加载项造成的平均延迟约为 2 秒。由于 GPO 将插件置于“DoNotDisableAddinList”as described here

,插件不会被禁用

不过,我确实想提高性能。最后,您甚至可以在 Outlook 加载屏幕上看到 Outlook 在加载加载项时“卡住了”那 2 秒。这不是我的解决方案。

到目前为止我做了什么

基本上,我尝试了很多方法来提高性能。首先,我查看了 at this article of Microsoft,其中介绍了如何提高 Office 加载项的性能。不幸的是,我发现 none 这些提示适用于我的情况,或者我已经意识到它们(如果我错了请纠正我):

  1. 按需加载 VSTO 加载项:我希望按钮在 Outlook 启动后立即可用,所以我想这对我来说不是一个选项
  2. 使用 Windows 安装程序发布 Office 解决方案:已按照描述完成 in this article of Microsoft
  3. 绕过功能区反射:尝试过这样做,但在我看来使用功能区时不可能XML
  4. 在单独的执行线程中执行昂贵的操作:不适用,没有“昂贵的操作”,只需加载插件按钮

我能找到什么

然后我尝试识别任何“昂贵”的操作,因此在调试模式下启动了我的应用程序,断点位于

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
        {
            return new Ribbon();
        }

跨过第一个断点 (2 x F10) 后,Outlook 加载屏幕很快出现,然后 Visual Studio 再次出现,下一个操作是我 [=52= 的 GetCustomUI 方法].这一个加载 XML 其中包含我的按钮的定义(位置,回调,图像,标签,...)。如下图所示,此函数的执行时间非常长(> 2000 毫秒)。此屏幕截图来自我公司的笔记本。在我的个人电脑上,加载时间约为 300 - 400 毫秒。

然后我考虑加载 XML 文件的慢 IO 并将 XML 内容硬编码到源代码中(我知道,很脏,但只是为了测试目的),但没有改变.该函数仍然执行了 2000 毫秒。

现在,我不知道下一步该尝试什么,我有点无助。也许你们中有人有任何想法。需要时,我还可以 post 更多部分的源代码。任何帮助表示赞赏。提前致谢!

如果您的插件仅响应功能区和上下文菜单的点击,则需要按需进行 - Outlook 第一次加载它,然后缓存功能区 XML 并在下次加载时仅当用户单击您的控件时。

另请记住,您会因使用 .Net 而受到惩罚 - Outlook 在执行您的插件中的任何内容之前必须加载您正在使用的特定版本的 .Net。