W jaki sposób powinienem używać foreach dla IEnumerable, żeby nie zawalić RAMu?
Przykładowa sytuacja:
IEnumerable<BusinessLineData> data = unitOfWork.BusinessLineAggregateDatas.Get(businessLineId); //pobieramy dane EF (ok. 2mln. obiektów)
// póki co jest ok, RAM nie zajęty bo jeszcze obiektów nie pobraliśmy
// aplikacja wykorzystuje 100MB
foreach (var s in data)
{
string a = $"{s.Id};{s.ComplaintNumber};{s.ReasonForRejection}";
// Podczas działania pętli obiekty są kolejno ładowane do RAMu, który w końcu się zapycha.
// Obiekt z poprzedniej iteracji nie zostaje zwolniony, mimo że w tym przypadku zmienna a jest tworzona na nowo co przebieg pętli.
// nie trzymamy przecież żadnej referencji do obiektu "s".
// Wywołanie w tym miejscu s.Dispose(); i GC nic nie daje.
}
// aplikacja wykorzystuje ponad 1GB RAMu
Jak sobie poradzić, by nie zapchać RAMu, tak by obiekt z poprzedniej iteracji był zwalniany?