我有一个Sitecore应用程序,我需要在另一个系统的循环中创建大量的Sitecore项目.以下是我的测试目的循环;
using (new Sitecore.SecurityModel.SecurityDisabler())
{
for (int i = 0; i < 20000; i++)
{
Item newItem = MyTemplateItem.CreateItemFrom(DateTime.Now.Ticks.ToString(), myParentItem);
newItem.Editing.BeginEdit();
newItem.Fields["Title"].Value = Guid.NewGuid().ToString();
newItem.Editing.EndEdit();
}
}
Run Code Online (Sandbox Code Playgroud)
当此循环正在运行并且在查看任务管理器时,进程内存使用量随着时间的推移而增加.
Sitecore Item类还没有实现IDisposable接口,所以我无法调用已创建项的Finalizer.
我怎样才能避免这种内存泄漏?
PS:我正在使用Windows应用程序来执行此操作以绕过IIS进程内存泄漏,其中Sitecore执行其缓存更新和索引构建,这应该在此过程结束时完成.
.net garbage-collection memory-leaks memory-management sitecore
在我的Sitecore内容树中,有几千个项目,我只想以编程方式更改几个项目.我想要更新我正在实时更改的每个项目的索引条目,而不是重建占用大量时间的整个lucene索引.我试过了
item.Database.Indexes.UpdateItem(item);
Run Code Online (Sandbox Code Playgroud)
但它已经过时并要求我使用SearchManager.
任何人都可以指导我如何更新给定项目的索引条目?
PS:我正在改变桌面应用程序中的项目,而不是网站.
在我的sitecore Web应用程序OnItemSaved事件中,我想检测项目是否正在EventDisabler上下文中保存.例如,项目编辑如下所示......
using (new EventDisabler())
{
item.Editing.BeginEdit();
// do edits
item.Editing.EndEdit();
}
Run Code Online (Sandbox Code Playgroud)
在下面的方法中,我想识别在EventDisabler上下文中编辑的项目.
protected void OnItemSaved(object sender, EventArgs args)
{
// detect EventDisabler() context
}
Run Code Online (Sandbox Code Playgroud)
此外,item.Editing.EndEdit(true);我可以保存一个项目,这意味着它意味着使用EventDisabler上下文.应用它的方式我只想检测EventDisabler().如何检测EventDisabler()?
sitecore ×3
sitecore6 ×2
.net ×1
asp.net ×1
c# ×1
c#-4.0 ×1
lucene ×1
lucene.net ×1
memory-leaks ×1