旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

.NET Core2.0小技能之MemoryCache题目修复处理的要领(图)【C#.Net教程】,MemoryCache,Core2.0,.NET

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:25评论:0


导读:这篇文章主要给人人引见了关于.NETCore2.0迁徙小技能之MemoryCache题目修复处理的相干材料,文中经由过程示例代码引见的异常细致,对人人的进修或许事情具有肯定的参...
这篇文章主要给人人引见了关于.NET Core 2.0迁徙小技能之MemoryCache题目修复处理的相干材料,文中经由过程示例代码引见的异常细致,对人人的进修或许事情具有肯定的参考进修代价,须要的朋友们下面跟着小编来一同进修进修吧。

媒介

人人应当都晓得,关于传统的.NET Framework项目而言,System.Runtime.Caching定名空间是经常运用的东西了,个中MemoryCache类则常被用于完成内存缓存。

.NET Core 2.0临时还不支撑System.Runtime.Caching dll,这也就意味着MemoryCache相干代码不再起作用了。

然则好消息是,我们能够运用.NET Core 2.0的新API完成内存缓存功用,简朴修正代码,处理不兼容题目。下面话不多说了,来一同看看细致的引见吧。

处理方案

1.将旧代码导入项目中,以下:


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);
   }
  }
 }
}

导入后你会发明VS会提醒没法找到System.Runtime.Caching定名空间,原有的代码没法直接编译运用。

2.增加对Microsoft.Extensions.Caching.Memory定名空间的援用,它供应了.NET Core默许完成的MemoryCache类,以及全新的内存缓存API


using Microsoft.Extensions.Caching.Memory;

3.改写代码,运用新的API完成内存缓存功用

初始化缓存对象体式格局改写前:


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)
  });
 }
}

结论

在运用了Microsoft.Extensions.Caching.Memory下的新API改写了旧代码后,你会发明原有的种种内存缓存超时战略全都是有对应新API的,包含AbsoluteExpiration, SlidingExpiration等等。

所以我们照样能够很轻松的运用.NET Core新API简朴修改下下就可以重用现有绝大部分旧代码,将其迁徙过来继承起作用。

迁徙后的完全代码以下:


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)
    });
   }
  }
 }
}

总结

以上就是.NET Core2.0小技能之MemoryCache题目修复处理的要领(图)的细致内容,更多请关注ki4网别的相干文章!

标签:MemoryCacheCore2.0.NET


欢迎 发表评论: