0

我开发的插件有一个非常奇怪的问题。

客户抱怨加载项由于加载时间慢而被 Outlook 禁用,但在我的代码中(avrg 为 1.2 秒),除了 AddIn Express 生成的代码(如下所示)之外,我没有在启动期间运行任何其他自定义代码。

 private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            logger.Debug("Startup called");
            this.AddInStartup();
            #region Add-in Express Regions generated code - do not modify

            this.FormsManager = AddinExpress.OL.ADXOlFormsManager.CurrentInstance;
            this.FormsManager.OnInitialize += new AddinExpress.OL.ADXOlFormsManager.OnComponentInitialize_EventHandler(this.FormsManager_OnInitialize);
            this.FormsManager.Initialize(this);
            #endregion
            logger.Debug("Exit Startup");
        }

另外,我有一个已加载的功能区功能区(按钮)。

插件的所有功能代码(例如登录、Web 服务调用)仅在单击功能区按钮打开 Outlook 时执行。

是否有任何潜在的问题我可能已经过去或可能与我的代码无关的外部原因,当所有发生的只是在 Outlook 启动期间加载的功能区时,Outlook 会抱怨我的插件启动缓慢?

4

1 回答 1

2

加载项启动缓慢的原因有多种......

但首先要做的是删除任何 Add-in Express 代码并查看加载所需的时间。对于没有 Add-in Express 程序集的新创建的外接程序项目,您是否得到相同的画面?

我建议应用通用方法来提高整体加载项性能,例如:

  1. 考虑在您的应用程序上使用本机图像生成器 (Ngen.exe)。使用 Ngen.exe 意味着用 CPU 消耗换取更多磁盘访问,因为 Ngen.exe 生成的本机映像可能比 MSIL 映像大。为了缩短热启动时间,您应该始终在您的应用程序上使用 Ngen.exe,因为这避免了应用程序代码的 JIT 编译的 CPU 成本。
  2. 如果程序集未安装在全局程序集缓存 (GAC) 中,则强名称程序集的哈希验证和 Ngen 图像验证会导致延迟(如果计算机上有该程序集的本机映像)。GAC 中安装的所有程序集都会跳过强名称验证。有关详细信息,请参阅 Gacutil.exe(全局程序集缓存工具)。
  3. Authenticode 验证增加了启动时间。Authenticode 签名的程序集必须通过证书颁发机构 (CA) 进行验证。此验证可能很耗时,因为它可能需要多次连接到网络才能下载当前的证书吊销列表。它还确保在通往受信任根的路径上有完整的有效证书链。在加载程序集时,这可能会导致几秒钟的延迟。考虑在客户端计算机上安装 CA 证书,或尽可能避免使用 Authenticode。如果您知道您的应用程序不需要发布者证据,则您无需支付签名验证的费用。

有关详细信息,请参阅应用程序启动时间。另请查看以下页面:

于 2016-05-16T13:44:34.173 回答