【发布时间】:2021-09-02 08:43:47
【问题描述】:
我开发了一个 Microsoft Outlook 插件,用于向我们的 IT Sec 团队报告可疑电子邮件。插件基本上由“Outlook Mail Explorer Ribbon”中显示的按钮、“Outlook Mail Read Ribbon”和右键单击任何电子邮件时打开的上下文菜单组成。加载项只是将任何选定的电子邮件转发到我们 IT Sec 的邮箱,用于垃圾邮件/网络钓鱼/... 加载项本身按预期执行,我只有加载时间有问题(每当我启动 Outlook 时,不仅在安装后第一次启动时)。
我从SO answer 中获取了很多关于 Ribbon Designer VS XML 的信息(感谢 bud!)。我决定使用 Ribbon XML,因为它能够操作上下文菜单以及设计它的简单明了的方式。此外,我创建了一个 Windows 安装程序,用于在系统范围内安装插件(请参阅下面的信息)。
在我的私人 PC 上开发此插件时,我的加载时间“正常”,插件没有问题。但是,对于我公司的笔记本,我的加载时间非常长。 Outlook 本身声明加载项导致的平均延迟约为 2 秒。由于 GPO 将加载项放在“DoNotDisableAddinList”as described here 上,加载项不会被禁用。
不过,我确实想提高性能。最后,您甚至可以在 Outlook 加载屏幕上看到 Outlook 在加载加载项时“卡住”了 2 秒。这不是我的解决方案。
到目前为止我做了什么
基本上,我尝试了很多方法来提高性能。首先,我查看了at this article of Microsoft,这是关于如何提高 Office 加载项性能的。不幸的是,我发现这些提示都不适用于我的案例,或者我已经意识到它们(如果我错了,请纠正我):
- 按需加载 VSTO 加载项:我希望这些按钮在 Outlook 启动后立即可用,所以我猜这不是我的选择
- 使用 Windows Installer 发布 Office 解决方案:已按照 in this article of Microsoft 的描述完成
- 绕过功能区反射:尝试这样做,但在我看来,使用功能区 XML 时不可能
- 在单独的执行线程中执行昂贵的操作:不适用,没有“昂贵的操作”,只需加载加载项按钮
我能找到什么
然后我尝试识别任何“昂贵”的操作,因此在调试模式下启动了我的应用程序,断点位于
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new Ribbon();
}
跨过第一个断点 (2 x F10) 后,Outlook 加载屏幕很快出现,然后 Visual Studio 再次出现,下一个操作是我的 Ribbon.cs 的 GetCustomUI 方法。这个加载包含我的按钮定义(位置、回调、图像、标签......)的 XML。如下图所示,此函数的执行时间非常长(> 2000 ms)。此屏幕截图取自我的公司笔记本。在我的私人 PC 上,加载时间约为 300 - 400 毫秒。
然后我考虑了加载 XML 文件的慢 IO 并将 XML 内容硬编码到源代码中(我知道,很脏,但只是为了测试目的),但没有改变。该函数仍然执行了 2000 毫秒。
现在,我不知道下一步该尝试什么,我有点无助。也许你们中的某个人有任何想法。如果需要,我还可以发布更多部分的源代码。任何帮助表示赞赏。提前感谢您!
【问题讨论】:
标签: c# outlook vsto outlook-addin