Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zu .NET Core 2.0-Migrationstipps und zur Reparatur und Lösung von Speicher-Cache-Problemen ein Wer es braucht, folgt bitte dem Herausgeber, um gemeinsam zu lernen.
Vorwort
Jeder sollte wissen, dass für traditionelle .NET Framework-Projekte der System.Runtime.Caching
-Namespace ein häufig verwendetes Tool ist, darunter das Die MemoryCache-Klasse wird häufig zum Implementieren von Speicher-Caching verwendet.
.NET Core 2.0 unterstützt die System.Runtime.Caching-DLL noch nicht, was bedeutet, dass MemoryCache-bezogener Code nicht mehr funktioniert.
Aber die gute Nachricht ist, dass wir die neue API von .NET Core 2.0 verwenden können, um die Speichercache-Funktion zu implementieren und einfach den Code ändern, um das Inkompatibilitätsproblem zu lösen. Im Folgenden gibt es nicht viel zu sagen. Werfen wir einen Blick auf die ausführliche Einführung.
Lösung
1. Importieren Sie den alten Code wie folgt in das Projekt:
using System; using System.Runtime.Caching; namespace TestWebApp.Service { public class MemoryCacheService { static ObjectCache cache = MemoryCache.Default; /// <summary> /// 获取缓存值 /// </summary> /// <param name="key"></param> /// <returns></returns> private object GetCacheValue(string key) { if (key != null && cache.Contains(key)) { return cache[key]; } return default(object); } /// <summary> /// 添加缓存内容 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void SetChacheValue(string key, object value) { if (key != null) { CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = TimeSpan.FromHours(1) }; cache.Set(key, value, policy); } } } }
Nach dem Import werden Sie feststellen, dass VS Sie auffordert, den System.Runtime.Caching
-Namespace nicht zu finden und den Originalcode nicht direkt zu kompilieren und zu verwenden.
2. Fügen Sie einen Verweis auf den Microsoft.Extensions.Caching.Memory
-Namespace hinzu, der die von .NET Core standardmäßig implementierte MemoryCache-Klasse und die neue Speicher-Cache-API
using Microsoft.Extensions.Caching.Memory;
static ObjectCache cache = MemoryCache.Default;
static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
private object GetCacheValue(string key) { if (key != null && cache.Contains(key)) { return cache[key]; } return default(object); }
private object GetCacheValue(string key) { object val = null; if (key != null && cache.TryGetValue(key, out val)) { return val; } else { return default(object); } }
public static void SetChacheValue(string key, object value) { if (key != null) { CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = TimeSpan.FromHours(1) }; cache.Set(key, value, policy); } }
public static void SetChacheValue(string key, object value) { if (key != null) { cache.Set(key, value, new MemoryCacheEntryOptions { SlidingExpiration = TimeSpan.FromHours(1) }); } }
Fazit
neu geschrieben haben, werden Sie feststellen, dass alle ursprünglichen Speicher-Cache-Timeout-Strategien über entsprechende neue APIs verfügen, einschließlich AbsoluteExpiration, SlidingExpiration, usw. Microsoft.Extensions.Caching.Memory
Der vollständige Code nach der Migration lautet wie folgt:
Das obige ist der detaillierte Inhalt vonLösungen zur Behebung von MemoryCache-Problemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!