Mam aplikację Sitecore, w której potrzebuję utworzyć dużą liczbę elementów Sitecore w pętli z innego systemu. Poniżej znajduje się moja pętla celu testowania;Tworzenie dużej ilości elementów Sitecore powoduje wyciek pamięci
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();
}
}
Gdy ta pętla jest uruchomiona i podczas przeglądania w menedżerze zadań, zużycie pamięci procesowej wzrasta wraz z upływem czasu.
Sitecore Item
klasa nie zaimplementowała interfejsu IDisposable
, więc nie mogę wywołać Finalizatora utworzonego elementu.
Jak mogę uniknąć wycieku pamięci?
PS: Używam aplikacji Windows do wykonania tej operacji w celu obejścia przecieku pamięci procesu IIS, gdzie Sitecore wykonuje aktualizację pamięci podręcznej i tworzenie indeksu, co powinno zostać wykonane na końcu tego procesu.
Czy jesteś pewien, że to naprawdę wyciek? Wykonujesz funkcję, która musi alokować pamięć i robić to w pętli. To, że pamięć procesowa idzie w górę, nie oznacza, że jest to przeciek. Czy pamięć nigdy nie zanika? – ddysart
Myślę, że moja terminologia jest poprawna, pamięć ciągle rośnie i jeśli pamięć RAM jest pełna, komputer zostanie ponownie uruchomiony. To przeciek pamięci. Monitorowałem pętlę przez około godzinę. –