gpt4 book ai didi

.net - 创建大量 Sitecore 项目会导致内存泄漏

转载 作者:行者123 更新时间:2023-12-04 15:35:01 25 4
gpt4 key购买 nike

我有一个 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();
}
}

当此循环运行并在任务管理器中查看时,进程内存使用量随着时间的推移而增加。

网站核心 Item类尚未实现 IDisposable接口(interface),所以我不能调用创建项目的终结器。

如何避免这种内存泄漏?

PS:我正在使用 Windows 应用程序来执行此操作以绕过 IIS 进程内存泄漏,Sitecore 在此进行缓存更新和索引构建,这应该在此过程结束时完成。

最佳答案

您可以在项目创建期间暂时禁用数据库缓存:

using (new Sitecore.Data.DatabaseCacheDisabler())

您可以使用以下方法在创建期间禁用索引:
Sitecore.Configuration.Settings.Indexing.Enabled = false;

尝试添加这两件事,看看是否有帮助。

更新:
也许这会奏效。
在 EndEdit() 之后将其添加到循环中:
newItem = null;

if (i % 100 == 0)
{
GC.Collect();
GC.WaitForPendingFinalizers();
}

每次添加 100 个项目时,它将强制垃圾收集器尝试回收未使用的内存。

如果这可行,那么您实际上不必自己调用 GC,它会在某个时候自动发生,您只是不知道何时。

关于.net - 创建大量 Sitecore 项目会导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16602031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com