我的要求是删除除前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版本?
答案 0 :(得分:0)
为什么不将列表设置为仅在Web中保留25个版本?