Empecé haciendo esto:
public static void limpiaLista(SPList lista)
{
while (lista.Items.Count > 0)
lista.Items[0].Delete();
}
Tras otro rato de investigación cambié mi procedimiento por:
public static void limpiaListaRapido(SPList lista)
{
List<int> items = new List<int>();
foreach (SPListItem item in lista.Items)
items.Add(item.ID);
// Creamos el batch CAML
string batch = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<Batch>" +
"<Method>" +
"<SetList Scope=\"Request\">" + lista.ID + "</SetList>" +
"<SetVar Name=\"ID\">{0}</SetVar>" +
"<SetVar Name=\"Cmd\">Delete</SetVar>" +
"</Method>" +
"</Batch>";
// Y ahora para cada objeto de la lista aplicamos el comando
foreach (object item in items)
lista.ParentWeb.ProcessBatchData(string.Format(batch, item));
}
Y probé, y era más rápido, de hecho bastante más rápido, pero tenía un problema, que no solo borraba los elementos de la lista sino que, además, los metía en la papelera de reciclaje, con lo cual tras hacer el "limpiaListaRapido", si no quieres esperar 60 días a que te desaparezcan los datos basura tienes que hacer esto:
public static void vaciaPapeleras(SPWeb web)
{
//Vaciamos la papelera del sitio
web.RecycleBin.DeleteAll();
//Vaciamos la papelera de la coleccide sitios
web.Site.RecycleBin.DeleteAll();
}
Y resulta que vaciar las dos papeleras de reciclaje tarda otro buen rato por lo que en resumen:
El tiempo que tarda "limpiaLista" es comparable al tiempo que tarda "limpiaListaRapido"+"vaciaPapeleras".
Eso sí, si no te importa que la papelera se te llene de basura (que bien mirado para eso esta), el método de las CAML es bastante más rápido.
Ahora, la pregunta que me surge es otra, ¿Hay un comando CAML que borre las entradas sin pasar por la papelera? Si lo encuentro lo postearé (
No hay comentarios:
Publicar un comentario