Интеграция с VSTO Outlook — синхронизация замедляется на больших наборах данных

Я работаю над надстройкой Outlook 2007, используя VSTO, и одна из задач моей надстройки — импортировать контакты с помощью веб-службы.

Алгоритм для этого очень прост: он запрашивает у веб-сервиса список идентификаторов элементов, которые необходимо синхронизировать, а затем получает их и сохраняет в Outlook.

Проблема возникает, когда мне нужно синхронизировать большое количество записей (например, 1000). Сначала это довольно быстро синхронизирует 100 записей примерно за 15 секунд, но чем больше записей, тем медленнее. После получения 900 записей требуется около полутора минут, чтобы получить последние 100.

Я почти уверен, что это не проблема моего кода, потому что он очень прост (что-то вроде этого):

foreach (int i in idCollection) {
    Contact c = service.GetContact(i);

    Outlook.Contact contact = (Outlook.ContactItem)ThisAddIn.Application.
        CreateItem(Outlook.OlItemType.olContactItem);

    contact.FirstName = c.Name;
    // set few more fields like this

    contact.Save();
}

Одно из решений, о котором я думаю, заключается в том, что Outlook может индексировать контакты, и ему необходимо перестроить индекс после создания нового элемента. Поскольку я постоянно создаю новые элементы, ему нужно очень часто перестраивать индекс, а также индексировать все больше и больше элементов, и это может замедлить его работу. Но это только предположение. Я не нашел никаких подтверждений этому в MSDN.

Кто-нибудь знает, как решить эту проблему?


person RaYell    schedule 04.09.2009    source источник


Ответы (2)


Вы определили, какая линия замедляется? Создайте журнал с записями времени для некоторых основных методов, чтобы определить, является ли это (1) веб-службой, (2) новым объектом контакта или (3) сохранением контакта.

person Michael Regan    schedule 09.09.2009
comment
Этот код запускается в цикле, поэтому сначала один и тот же код выполняется очень быстро, но позже его обработка занимает все больше и больше времени. - person RaYell; 10.09.2009

Ответ можно найти здесь.

person RaYell    schedule 18.09.2009