【发布时间】:2013-05-12 04:59:26
【问题描述】:
我有一个 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();
}
}
当这个循环运行并且在任务管理器中查看时,进程内存使用量随着时间的推移而增加。
Sitecore Item 类没有实现IDisposable 接口,所以无法调用创建项的Finalizer。
如何避免这种内存泄漏?
PS:我正在使用 Windows 应用程序来执行此操作以绕过 IIS 进程内存泄漏,Sitecore 将在此过程结束时进行缓存更新和索引构建。
【问题讨论】:
-
你确定这真的是泄漏吗?您正在执行一个必须分配内存并循环执行的函数。仅仅因为进程内存上升并不意味着它是泄漏。内存永远不会下降吗?
-
我认为我的术语是正确的,内存不断增长,如果 RAM 已满,PC 将重新启动。它是内存泄漏。我已经监视了大约一个小时的循环。
标签: .net memory-management memory-leaks garbage-collection sitecore