SPC050226: Do not call SPListItemVersion.Delete to delete multiple versions

When you delete multiple versions of a list item, use the DeleteByID() method; do not use the Delete() method. You will experience performance problems if you delete each SPListItemVersion object from an SPListItemVersionCollection object.

TypeName: DoNotUseSPListItemVersionDelete
CheckId: SPC050226
Severity: CriticalWarning
Type: AssemblyFileReference
Resolution

The recommended practice is to create an array that contains the ID properties of each version and then delete each version by using the SPListItemVersionCollection.DeleteByID method.

SPSite site = new SPSite("site url");
SPWeb web = site.OpenWeb();
SPList list = web.Lists["custom list name"];
SPListItem item = list.GetItemById(1);
SPFile file = web.GetFile(item.Url);
SPFileVersionCollection collection = file.Versions;
ArrayList idList = new ArrayList();
foreach (SPFileVersion ver in collection)
{
   idList.Add(ver.ID);
}
foreach (int verID in idList)
{
   try
   {
       collection.DeleteByID(verID);
   }
   catch (Exception ex)
   {
   }
}

Links

comments powered by Disqus