【问题标题】:C# VSTO - Slowly loading Outlook Add-in (caused by Ribbon.xml?)C# VSTO - 缓慢加载 Outlook 加载项(由 Ribbon.xml 引起?)
【发布时间】: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 加载项性能的。不幸的是,我发现这些提示都不适用于我的案例,或者我已经意识到它们(如果我错了,请纠正我):

  1. 按需加载 VSTO 加载项:我希望这些按钮在 Outlook 启动后立即可用,所以我猜这不是我的选择
  2. 使用 Windows Installer 发布 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 再次出现,下一个操作是我的 Ribbon.cs 的 GetCustomUI 方法。这个加载包含我的按钮定义(位置、回调、图像、标签......)的 XML。如下图所示,此函数的执行时间非常长(> 2000 ms)。此屏幕截图取自我的公司笔记本。在我的私人 PC 上,加载时间约为 300 - 400 毫秒。

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

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

【问题讨论】:

    标签: c# outlook vsto outlook-addin


    【解决方案1】:

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

    另外请记住,您会因使用 .Net 而受到惩罚 - Outlook 必须先加载您正在使用的特定版本的 .Net,然后它才能在您的插件中执行任何操作。

    【讨论】:

    • 感谢您的回答!我会试试你的建议:)
    猜你喜欢
    • 2023-03-17
    • 2014-05-10
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 2017-03-10
    • 2020-09-18
    相关资源
    最近更新 更多