Я работаю над надстройкой 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.
Кто-нибудь знает, как решить эту проблему?