Я разрабатываю надстройку для Outlook, и у меня нет с этим опыта.
Надстройка вызывает некоторые веб-службы для заполнения раскрывающихся списков на ленте, и при выборе элемента в раскрывающемся списке почта отправляется в веб-службу для обработки. Все это работает, но очень медленно при запуске Outlook, а Outlook 2013 по умолчанию отключает медленные надстройки. Что я могу сделать, чтобы ускорить запуск? Можно ли перенести инициализацию на другое событие?
Вот основные моменты запуска:
ThisAddIn.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);
}
ЛентаMail.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 и две секунды между концом ThisAddIn_Startup и началом загрузки ленты?
Добавлено после ответа Траубенфукса. Я удалил NLog, чтобы проверить, была ли проблема в нем. Я удалил вызов CreateRibbonExtensibilityObject() в ThisAddIn_StartUp (который, по-видимому, был излишним). DLL с общим кодом все еще загружается, и я использую AutoFac для IoC.
После этих изменений надстройка загружается примерно через 750-800 мс на моем компьютере для разработки. Но на моих тестовых машинах это больше похоже на 4-5 секунд.
Вот как сейчас выглядит мой код:
ThisAddIn.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() });
}
ЛентаMail.cs:
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
new System.Threading.Thread(() =>
{
InitializeRibbon();
}).Start();
}
Я даже пытался удалить ссылки на AutoFac и общую DLL, закомментировать каждую строку кода и удалить все конфигурации в app.config. Для запуска по-прежнему требуется около 650-750 мс.
Любые предложения относительно того, что может вызвать эту проблему?