2016-08-12 24 views
5

Używam w moim projekcie IMemoryCache. Zastanawiam się, co się stanie, jeśli moja aplikacja popchnie wiele długowiecznych obiektów w pamięci podręcznej. Czy może zajmować całą dostępną pamięć? Czy mogę globalnie zdefiniować maksymalną pamięć dla aplikacji?Ograniczenie użycia pamięci w Asp.net Core

Odpowiedz

2

Zostało to napisane rok temu, więc zakładam, że używasz v1.x.x pakietu Microsoft.Extensions.Caching.Memory.

Ponieważ nie ma właściwości SizeLimit w MemoryCacheOptions jak v2.x.x, po zaglądaniu do kodu przez chwilę znalazłem następujący wiersz dokumentacji.

https://github.com/aspnet/Caching/blob/rel/1.1.2/src/Microsoft.Extensions.Caching.Memory/MemoryCache.cs#L329

/// This is called after a Gen2 garbage collection. We assume this means there was memory pressure. 
/// Remove at least 10% of the total entries (or estimated memory?). 

Zatem pakiet będzie jeść jak najwięcej pamięci, jak system operacyjny pozwoli mieć swój kod. Po osiągnięciu tego limitu rozpocznie się kompaktowanie (eksmisja) wpisów pamięci podręcznej.

Za pomocą v2.x.x możesz ustawić limit ręcznie, używając właściwości SizeLimit, a nawet ustawić poziom zagęszczenia, gdy limit zostanie osiągnięty CompactionPercentage.

+0

Czy SizeLimit oznacza rozmiar w bajtach? – Makla