私は、別のシステムのループ内に多数のSitecoreアイテムを作成する必要がある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
インターフェイスを実装していないため、作成したアイテムのファイナライザを呼び出すことができません。
このメモリリークを回避するにはどうすればよいですか?
PS:この処理を実行するためにWindowsアプリケーションを使用していますが、このプロセスの最後にSitecoreがキャッシュの更新とインデックスの作成を行うIISプロセスのメモリリークを回避します。
本当にリークですか?あなたは、メモリを割り当てる必要があり、ループでそれを行う関数を実行しています。プロセスメモリが上がったからといって、それがリークであるとは限りません。記憶は決して落ちませんか? – ddysart
私の用語は正しいと思います。メモリは増え続けていて、RAMがいっぱいになるとPCが再起動します。そのメモリリーク。私はループを約1時間監視しました。 –