Frage

Ich habe gerade an der Dokumentation für ein Open-Source-Projekt mit dem Namen gearbeitet, das ich vor einiger Zeit erstellt habe WebCacheHelper.Es handelt sich um eine Abstraktion zusätzlich zur vorhandenen Cache-Funktionalität in System.Web.Caching.

Ich habe Probleme, die Details des Algorithmus zu finden, der zum Löschen des Caches verwendet wird, wenn der Server nicht mehr über genügend Arbeitsspeicher verfügt.

Ich habe diesen Text auf gefunden MSDN:

Wenn der Webserver eine ASP.NET -Anwendung hostet, wird das Cache -Objekt gering ausgeführt Löscht selektiv Elemente, um Systemspeicher freizugeben.Wenn ein Element zum Cache hinzugefügt wird, können Sie es im Vergleich zu den anderen im Cache gespeicherten Elementen eine relative Priorität zuweisen.Elemente, denen Sie höhere Prioritätswerte zuweisen, sind weniger wahrscheinlich aus dem Cache gelöscht, wenn der Server eine große Anzahl von Anforderungen verarbeitet, während Elemente, denen Sie niedrigere Prioritätswerte zuweisen, eher gelöscht werden.

Für meinen Geschmack ist das noch etwas vage.Ich möchte wissen, welche anderen Faktoren verwendet werden, um zu bestimmen, wann ein zwischengespeichertes Objekt gelöscht werden muss.Handelt es sich um eine Kombination aus der Zeit des letzten Zugriffs und der Priorität?

War es hilfreich?

Lösung

Werfen wir einen Blick auf den Quellcode.Die Spülung beginnt ab TrimIfNecessary() Methode in CacheSingle Klasse.Zunächst wird versucht, alle abgelaufenen Elemente zu entfernen FlushExpiredItems() Methode von CacheExpires Klasse.Wenn das nicht ausreicht, beginnt es mit der Iteration durch „Buckets“. CacheUsage.FlushUnderUsedItems().Daten/Statistiken zur Cache-Nutzung entsprechend in „Buckets“ unterteilt CacheItemPriority und ihre Statistiken/LRU werden in jedem Bucket separat behandelt.Es gibt zwei Iterationen durch Buckets.Die erste Iteration entfernt nur neu hinzugefügte Elemente (während der letzten 10 Sekunden).Der zweite entfernt andere Elemente.Es beginnt mit dem Entfernen von Elementen aus CacheItemPriority.Low Bucket und seine LRU-Elemente.Es stoppt, wenn weit genug entfernt wird, andernfalls wird mit den nächsten LRU-Elementen und Buckets mit höherer Priorität fortgefahren.Es berührt nicht CacheItemPriority.NotRemovable Elemente, da sie nicht zu Nutzungsbereichen hinzugefügt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top