我有一个进程,我正在获取xml结果集,我可以从中处理数据并以编程方式在Sitecore中创建页面。如果我们有几页甚至一次,这很简单。 现在我的问题是我必须每天两次在Sitecore中创建至少50k页面,从xml.So加载到sitecore中的那么多数据一次是非常缓慢的过程。 是否有一种在Sitecore中创建这些页面的最佳方法。
我正在使用Sitecore 7。
页面创建过程
using (new Sitecore.SecurityModel.SecurityDisabler())
{
for (int i = 0; i < item.count; i++)
{
Item newCityItem = parentCityItem.Add("Page_" + i, template1);
newCityItem.Editing.BeginEdit();
try
{
newCityItem.Fields["html"].Value = mPages[i].ToString();
newCityItem.Editing.EndEdit();
}
catch (System.Exception ex)
{
// The update failed, write a message to the log
Sitecore.Diagnostics.Log.Error("Could not update item " + newCityItem.Paths.FullPath + ": " + ex.Message, this);
// Cancel the edit (not really needed, as Sitecore automatically aborts // the transaction on exceptions, but it wont hurt your code)
newCityItem.Editing.CancelEdit();
}
}
}
任何帮助......
答案 0 :(得分:2)
将循环包装在BulkUpdateContext中,以禁用事件,索引等
using(new BulkUpdateContext())
{
// code here
}
答案 1 :(得分:1)
我认为这不是创建Sitecore项目的另一种方式。
我建议你禁用master数据库的索引,因为在创建新项目时它会慢一点。如果您需要在创建项目后进行索引,则可以再次启用索引并开始重建索引。
答案 2 :(得分:1)
如果这些项目每天在Sitecore中被更换两次,我认为它们没有被编辑,而您正在使用Sitecore作为表示层。
如果是这样,您可以将xml映射为Sitecore DataProvider。这样,xml用作项目的来源 - 尽管它们仍然可以在Sitecore中读取,并且Sitecore表示层将它们视为常规的sitecore项目。
有一篇博文在http://blog.horizontalintegration.com/2013/03/17/an-introduction-to-sitecore-data-providers/解释,以及SDN中的一些文档。
编辑(感谢jammykam)
我不会直接映射到xml文件 - 可能将其放入db中,然后将 映射到sitecore。
答案 3 :(得分:0)
每次保存项目时,统计信息都会更新(如修改后的用户,修改日期等),并且所有事件都被触发(项目已保存,索引构建等)。您可以禁用以下两项:
item.Editing.BeginEdit();
item["Title"] = "My new title";
item.Editing.EndEdit(false, true);
根据您的要求,您可能需要在导入结束时重建索引。