Sitecore - 删除存储桶子项

时间:2016-04-04 13:58:55

标签: sitecore sitecore7

我有项目导入程序,它删除所有项目子项并创建新的子项目。最近我把它切换到桶,现在我有删除问题。 我使用以下方法删除项目:

myItem.DeleteChildren();

没有水桶需要大约20分钟。现在,5k项目大约需要1小时。我是否需要在删除之前还原存储桶项目然后再次同步? 删除可转储项目的最快方法是什么?

4 个答案:

答案 0 :(得分:2)

我的猜测是,您的删除现在需要更长时间,因为存储桶在删除时正在更新索引。虽然您可以通过禁用.DeleteChildren调用周围的事件来加快速度,但您仍需要更新这些索引以使您的存储桶正常运行。

所以要回答你的问题,没有办法加快速度,同时还要保留完整的功能。

如果您想对此进行测试,请尝试以下操作:

using(new EventDisabler()) myItem.DeleteChildren();

它应该将删除速度提升到以前的水平,但是以一个无法正常工作的存储桶的价格,直到建立了索引。

我建议您调整集成方法,不需要完全删除和重建项目存储。

答案 1 :(得分:1)

如果存储桶中有很多项目,它将对每个要删除的项目执行事件。将删除代码放在事件禁用程序中:

using (new EventDisabler())
{
   myItem.DeleteChildren();
}

这将阻止所有事件发射,并且应该更快。作为警告 - 执行此操作时索引不会立即更新,因此您可能希望在导入程序运行后在主数据库上运行索引更新。

另一种选择是更新导入中的现有项目,而不是先删除所有项目。

答案 2 :(得分:1)

You could take it a step further. I was able to import 30k in minutes by disabling all three.

using (new Sitecore.SecurityModel.SecurityDisabler())
{
    using (new Sitecore.Data.Events.EventDisabler())
    {
        using (new ProxyDisabler())
        {
            //delete code here
        }
    }
}

答案 3 :(得分:0)

在调用DeleteChildren()之前,可能(以编程方式)unbucket?我不知道总共需要多长时间,但可能比现在更快