【发布时间】:2013-11-19 07:46:17
【问题描述】:
我正在为 Outlook 开发插件,但对此没有任何经验。
ADDIN正在调用一些Web服务以在功能区中填充下拉框,并且在下拉框中选择项目时,将邮件发送到WebS服务以进行处理。这一切都有效,但是在启动 Outlook 和 Outlook 2013 默认情况下禁用慢速插件时它真的很慢。我能做些什么来加快启动速度?是否可以将初始化移动到另一个事件?
这些是初创公司的亮点:
这个AddIn.cs:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
_logger.Info("ThisAddIn_Startup begin");
CreateRibbonExtensibilityObject();
_logger.Info("ThisAddIn_Startup end");
}
public override void BeginInit()
{
_logger.Info("BeginInit begin");
var bootstrapper = new Bootstrapper();
bootstrapper.ConfigureOutlookAddIn();
IocContainer.Container = bootstrapper.Container;
base.BeginInit();
_logger.Info("BeginInit end");
}
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
_logger.Info("CreateRibbonExtensibilityObject begin");
Microsoft.Office.Tools.Ribbon.IRibbonExtension[] ribbons = new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] { new RibbonConnectMail() };
_logger.Info("CreateRibbonExtensibilityObject end");
return Globals.Factory.GetRibbonFactory().CreateRibbonManager(ribbons);
}
RibbonMail.cs:
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
_logger.Info("Ribbon load begin");
init();
_logger.Info("Ribbon load end");
}
这是记录的内容:
2013-11-19 08:34:27.0380|INFO|ThisAddIn|CreateRibbonExtensibilityObject begin
2013-11-19 08:34:28.0770|INFO|ThisAddIn|CreateRibbonExtensibilityObject end
2013-11-19 08:34:28.4982|INFO|ThisAddIn|BeginInit begin
2013-11-19 08:34:28.5543|INFO|ThisAddIn|BeginInit end
2013-11-19 08:34:32.0143|INFO|ThisAddIn|ThisAddIn_Startup begin
2013-11-19 08:34:32.0143|INFO|ThisAddIn|CreateRibbonExtensibilityObject begin
2013-11-19 08:34:32.0283|INFO|ThisAddIn|CreateRibbonExtensibilityObject end
2013-11-19 08:34:32.0283|INFO|ThisAddIn|ThisAddIn_Startup end
2013-11-19 08:34:34.2045|INFO|RibbonMail|Ribbon load begin
2013-11-19 08:34:36.4228|INFO|RibbonMail|Ribbon load end
什么需要这么长时间?这些方法之间会发生什么(例如 BeginInit 结束和 ThisAddIn_Startup 开始之间的 4 秒以及 ThisAddIn_Startup 结束和 Ribbon 加载开始之间的 2 秒?
在 Traubenfuchs 回答后添加 我已删除 NLog 以查看是否是问题所在。我在 ThisAddIn_StartUp 中删除了对 CreateRibbonExtensibilityObject() 的调用(这似乎是多余的)。一个共享代码的 DLL 仍然被加载,我正在使用 AutoFac for IoC。
在这些更改之后,插件在我的开发机器上加载大约需要 750-800 毫秒。但在我的测试机器上,它更像是 4-5 秒。
这就是我的代码现在的样子:
这个AddIn.cs:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return Globals.Factory.GetRibbonFactory().CreateRibbonManager(new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] { new RibbonMail() });
}
RibbonMail.cs:
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
new System.Threading.Thread(() =>
{
InitializeRibbon();
}).Start();
}
我什至尝试删除对 AutoFac 和共享 DLL 的引用,注释掉每一行代码并删除 app.config 中的所有配置。启动仍然需要大约 650-750 毫秒。
关于可能导致此问题的任何建议?
【问题讨论】: