我有项目导入程序,它删除所有项目子项并创建新的子项目。最近我把它切换到桶,现在我有删除问题。 我使用以下方法删除项目:
myItem.DeleteChildren();
没有水桶需要大约20分钟。现在,5k项目大约需要1小时。我是否需要在删除之前还原存储桶项目然后再次同步? 删除可转储项目的最快方法是什么?
答案 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?我不知道总共需要多长时间,但可能比现在更快