.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应用迁移到.NET Core(一)
.NET应用迁移到.NET Core(二)风险评估
.NET应用迁移到.NET Core(三)从商业角度看移植过程
.NET应用迁移到.NET Core--调查案例
迁移传统.net 应用到.net core [视频]
应用工具 .NET Portability Analyzer 分析迁移dotnet core
.net core 2.0学习笔记(一):开发运行环境搭建
.net core 2.0学习笔记(二):Hello World & 进阶
度量.net framework 迁移到.net core的工作量
迁移.net framework 工程到.net core
程序配置&ConfigurationManager
.NET Core 2.0迁移技巧之web.config配置文件
原文地址:http://www.cnblogs.com/mantgh/p/7429551.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
.NET Core 2.0迁移技巧之MemoryCache问题修复相关推荐
- .NET Core 2.0迁移技巧之web.config配置文件
大家都知道.NET Core现在不再支持原来的web.config配置文件了,取而代之的是json或xml配置文件.官方推荐的项目配置方式是使用appsettings.json配置文件,这对现有一些重 ...
- ASP.NET Core 3.0 迁移避坑指南
一.前言 .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core ...
- ASP.NET Core 2.0 自定义 _ViewStart 和 _ViewImports 的目录位置
在 ASP.NET Core 里扩展 Razor 查找视图目录不是什么新鲜和困难的事情,但 _ViewStart 和 _ViewImports 这2个视图比较特殊,如果想让 Razor 在我们指定的目 ...
- migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...
dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...
- .NET Core 3.0 即将结束生命周期,建议迁移 3.1
.NET Core 官方发布博客,说明 .NET Core 3.0 即将结束生命周期,建议开发者迁移到 3.1 版本. .NET Core 3.0 于 2019 年 12 月 3 日发布,这是一个 C ...
- 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
今年五月的 Build 大会上,微软说 .NET Core 3.0 将带来 WPF / Windows Forms 这些桌面应用的支持.当然,是通过 Windows 兼容包(Windows Compa ...
- 把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析
因为自己到开发电脑转到Mac Air,之前的Webform/MVC应用在Mac 跑不起来,而且.Net Core 2.0 已经比较稳定了. 1. 为什么会有跨平台的.Net Core 近年来,我们已 ...
- Entity Framework Core 2.0 使用代码进行自动迁移
一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...
- 为什么你需要将代码迁移到ASP.NET Core 2.0?
随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...
最新文章
- 记住密码以及Android 列表的操作
- Android之解决在scrollview中嵌套ListView切换界面时scrollview整体向下滑动
- 前端大神用React刻了一个Windows XP
- 配置管理之PackageProvider接口
- 软件项目管理0806:分包付款资料
- sqoop 增量导入mysql_sqoop增量导入数据库
- HDU - 6356 Glad You Came(线段树)
- HDU 2996 In case of failure [KD树]
- Java 9 将采用新的版本字符串格式
- #define typedef 区别
- 数据挖掘学习笔记 5 线性回归知识及预测糖尿病实例
- Python计算机视觉中译本实例代码/数据集
- HOWTO:InstallShield中如何通过脚本获取“My Documents”路径
- 乌鲁木齐高新区大数据产业首个惠农项目落地
- 通话时自动中断音乐播放_您知道用户在何处以及为何中断通话吗?
- java5.0下载_java虚拟机官方下载|java虚拟机下载 v5.0 官方免费版-520下载站
- 编译原理研究性学习专题 2——递归下降语法分析设计原理与实现
- linux wps 微软雅黑字体,微软雅黑字体下载,微软雅黑字体下载应用到wps
- ionic基本命令行
- 硬货专栏 |深入浅出 WebRTC AEC(声学回声消除)
热门文章
- 第十一周项目3-程序的多文件组织
- MYSQ 查看 2 进制日志
- 酷桌面:随身携带你的企业
- 一个IT人的非典型职场十年 (5)
- NET框架下如何使用PaddleOCRSharp
- 万箭齐发!COSCon' 21深圳分会场闪亮登场!
- Blazor WebAssembly 应用程序中进行 HTTP 请求
- iNeuOS工业互联平台,发布消息管理、子用户权限管理、元件移动事件、联动控制、油表饼状图和建筑类设备驱动,v3.4版本...
- 如何在 ASP.NET Core 中使用 Route 特性
- 解锁环境变量在云原生应用中的各种姿势