Используйте Web Money - это очень удобно

среда, 30 апреля 2008 г.

Оптимизация кода.

При выполнении запросов к большим спискам > 1000 элементов код запросов выполняется очень медленно.
Тем более, что этот код обычно кроме обращения содержит еще какие-нибудь действия с найденными элементами.
Часто приходится использовать foreach для элементов списка или коллекций если нужно проверить какой-то флаг.
Хочу поделиться проблемами и моей оптимизацией решения.

1. Односторонняя синхронизация списка с базой данных: Кол-во элементов > 8000
время синхронизации ~десятых долей секунды. (Зависит от быстродействия сервера, время чтения списка ~ 8 сек. из базы ~ 3-4)
Решение: использование метода SPList.Items.GetDataTable(); И работа с dataSource. Конечно же не забывая о кодировках - в базе и списке sharepoint некоторые символы различаются.

2. Большой список, нужно найти элемент, или несколько - < 1% от общего числа.
Решение: использовать поиск sharepoint FullTextSqlSearch - работает на порядок быстрее чем SPQuery и, тем более чем перебор.
Элементы для изменения получаем используя getItemById().
ИД должен быть одним из параметров запроса.

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

3. Если код настолько громоздкий, что пользователь отваливается по таймауту, то мне приходит в голову решение с использованием вебсервисов и ajax - постепенное выполнение кода разбитого на этапы.

Дискуссия по этому вопросу Приветствуется!!!!

Комментариев нет: