Heim > Backend-Entwicklung > C#.Net-Tutorial > .NET Core2.0-Tipps: So beheben Sie MemoryCache-Probleme (Bild)

.NET Core2.0-Tipps: So beheben Sie MemoryCache-Probleme (Bild)

黄舟
Freigeben: 2017-09-05 15:19:01
Original
2461 Leute haben es durchsucht

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 Login kopieren

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

< bereitstellt 🎜 >


using Microsoft.Extensions.Caching.Memory;
Nach dem Login kopieren
3. Schreiben Sie den Code neu und verwenden Sie die neue API, um die Speicher-Cache-Funktion zu implementieren

Bevor Sie die Initialisierungs-Cache-Objektmethode neu schreiben:


static ObjectCache cache = MemoryCache.Default;
Nach dem Login kopieren
Nach dem Umschreiben der Methode zum Initialisieren des Cache-Objekts:


static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
Nach dem Login kopieren
Die Methode zum Lesen des Speicher-Cache-Werts wurde geändert:


private object GetCacheValue(string key)
{
 if (key != null && cache.Contains(key))
 {
  return cache[key];
 }
 return default(object);
}
Nach dem Login kopieren
Nach dem Umschreiben:


private object GetCacheValue(string key)
{
 object val = null;
 if (key != null && cache.TryGetValue(key, out val))
 {
  return val;
 }
 else
 {
  return default(object);
 }
}
Nach dem Login kopieren
Änderungen bei der Einstellung des Speicher-Cache-Inhalts Methode:


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 Login kopieren
Nach der Änderung:


public static void SetChacheValue(string key, object value)
{
 if (key != null)
 {
  cache.Set(key, value, new MemoryCacheEntryOptions
  {
   SlidingExpiration = TimeSpan.FromHours(1)
  });
 }
}
Nach dem Login kopieren

Fazit

Im Einsatz Nachdem Sie den alten Code mit der neuen API unter

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

So können wir die neue .NET Core-API weiterhin problemlos verwenden, um mit einfachen Änderungen den größten Teil des vorhandenen alten Codes wiederzuverwenden und ihn zu migrieren, damit er weiterhin funktioniert.

Der vollständige Code nach der Migration lautet wie folgt:


using Microsoft.Extensions.Caching.Memory;
using System;

namespace TestMemoryCacheWebApp.Services
{
 public class MemoryCacheService
 {
  static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
  /// <summary>
  /// 获取缓存值
  /// </summary>
  /// <param name="key"></param>
  /// <returns></returns>
  private object GetCacheValue(string key)
  {
   object val = null;
   if (key != null && cache.TryGetValue(key, out val))
   {

    return val;
   }
   else
   {
    return default(object);
   }
  }
  /// <summary>
  /// 添加缓存内容
  /// </summary>
  /// <param name="key"></param>
  /// <param name="value"></param>
  public static void SetChacheValue(string key, object value)
  {
   if (key != null)
   {
    cache.Set(key, value, new MemoryCacheEntryOptions
    {
     SlidingExpiration = TimeSpan.FromHours(1)
    });
   }
  }
 }
}
Nach dem Login kopieren

Zusammenfassung

Das obige ist der detaillierte Inhalt von.NET Core2.0-Tipps: So beheben Sie MemoryCache-Probleme (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage