Задача: быстро очистить список от большого количества элементов.
Решение: Будем использовать пакетное удаление элементов из списка.
private static void ClearList(SPList list){
string xmlCaml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>"; string itemNode = @"<Method><SetList Scope=""Request"">" + list.ID + "</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar></Method>"; foreach (SPListItem item in list.Items)xmlCaml +=
string.Format(itemNode, item.ID.ToString());xmlCaml +=
"</Batch>";list.ParentWeb.ProcessBatchData(xmlCaml);
}
Разница между этим методом и последовательным удалением элементов огромная и скорость при увеличении количества элементов падает по линейному закону. Так что крайне рекомендую для очистки списка использовать именно этот код.
3 комментария:
Это же какого размера получится строка запроса для списка действительно приличного размера?
Довольно легко посчитать.
11 мегабайт на 100 000 элементов.
Однако этот метод самый простой и быстрый.
Другое что я использовал, это сохранение списка как шаблона и развертывание его снова. Удаление по одному элементу меня не впечатлило, на обьеме в 40 000 элементов я просто устал ждать, время было больше 30 минут :(
А других-то методов и не видно (после развёртывания из шаблона это будет другой список, чего иногда не требуется...). Вот здесь нашлась версия, которая формирует запрос и удаляет кусками, чтоб сильно много памяти не отъедать.
У меня получилось 100 элементов/сек. А по одному - тоска, конечно...
Отправить комментарий