2016-08-12 3 views
5

Ich verwende IMemoryCache in meinem Projekt. Ich frage mich, was passiert, wenn meine App viele langlebige Objekte in den Cache schiebt. Kann es den gesamten verfügbaren Speicher belegen? Kann ich den maximalen Speicher für die App global definieren?Einschränkung der Speichernutzung in Asp.net Core

Antwort

2

Das wurde vor einem Jahr geschrieben, also gehe ich davon aus, dass Sie v1.x.x des Microsoft.Extensions.Caching.Memory Pakets verwenden.

Da gibt es keine SizeLimit Eigenschaft in der MemoryCacheOptions wie v2.x.x, nachdem ich in den Code für eine Weile herum gräbt habe ich die folgende Zeile der Dokumentation gefunden.

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?). 

So wird das Paket so viel Speicher wie das Betriebssystem Ihren Code haben können auffressen. Wenn es diese Grenze erreicht, beginnt es mit der Komprimierung (Vertreibung) von Cache-Einträgen.

Mit v2.x.x Sie die Grenze manuell SizeLimit Eigenschaft verwenden festlegen und Sie können sogar die Menge der Verdichtung eingestellt, wenn die Grenze CompactionPercentage getroffen wird.

+0

Bedeutet SizeLimit Größe in Bytes? – Makla

Verwandte Themen