删除列表项版本的更快捷方法

时间:2011-09-16 14:06:20

标签: sharepoint-2007

我的要求是删除除前25个以外的所有SPListItem版本...所以我必须从26或索引25开始删除。库中的一个SPListItem有这么多版本...可能超过100k Web界面无法显示所有版本。数据库的大小几乎是900GB。

我编写了这段代码,但我认为问题在于item.Versions属性。它试图加载内存中的所有版本

foreach (SPListItem item in library.Items)
{  
  foundMoreVersionsThanRequired = false;
  int tempVersionToKepp = howManyVersionsToKeep + 1;

  for (int i = 0; i <= tempVersionToKepp; i++)
  {
    SPListItemVersion objVersion = null;

    try
    {
       objVersion = item.Versions[i];
       if (objVersion != null && i == tempVersionToKepp)
       {
         foundMoreVersionsThanRequired = true;
         break;
       }
     }
     catch
     {
       foundMoreVersionsThanRequired = false;
       break;
     }
   }
   if (foundMoreVersionsThanRequired)
   {
     int tempIndex = howManyVersionsToKeep + 1;                     
     SPListItemVersion objVersion = null;
     do
     {
       try
       {
         objVersion = item.Versions[tempIndex];
         if (objVersion != null)
         {
           objVersion.Delete();
         }
         else
           break;
       }
       catch
       {
         break;
       }
     } while (true);
   }
   count++;
 }

我很肯定问题在于“item.Versions”属性。看来当你调用item.Versions时,它会加载内存中的所有对象,这会导致很多问题。

是否可以直接删除SPListItem版本?

1 个答案:

答案 0 :(得分:0)

为什么不将列表设置为仅在Web中保留25个版本?