全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#怎么使用MemoryCache C#实现内存缓存方法

C#中使用MemoryCache需通过Microsoft.Extensions.Caching.Memory实现,支持线程安全、过期策略与依赖项;ASP.NET Core内置注册AddMemoryCache(),其他项目需安装NuGet包并推荐依赖注入;存取用Set/TryGetValue或GetOrCreate,支持绝对/滑动过期、优先级和取消令牌;注意对象线程安全、不可变性、内存占用及进程内限制。

在 C# 中使用 MemoryCache 实现内存缓存,核心是借助 Microsoft.Extensions.Caching.Memory 命名空间下的 IMemoryCache 接口和默认实现类。它轻量、线程安全、支持过期策略和依赖项,适合 ASP.NET Core 应用或普通 .NET 项目(需安装 NuGet 包)。

引入依赖和注册服务

如果是 ASP.NET Core 项目,IMemoryCache 已内置,只需在 Program.csStartup.cs 中注册:

  • Program.cs(.NET 6+)中调用 builder.Services.AddMemoryCache();
  • 若为 .NET Framework 或控制台项目,需手动安装 NuGet 包:Microsoft.Extensions.Caching.Memory
  • 然后通过 new MemoryCache(new MemoryCacheOptions()) 创建实例(不推荐直接 new,建议依赖注入)

在类中注入并使用缓存

在需要缓存的类(如 Controller、Service)构造函数中注入 IMemoryCache

  • private readonly IMemoryCache _cache;
  • public MyService(IMemoryCache cache) => _cache = cache;
  • 存值:用 _cache.Set("key", value, TimeSpan.FromMinutes(10));
  • 取值:用 _cache.TryGetValue("key", out var result)(返回 bool,成功则 result 有值)
  • 推荐用 GetOrCreate 方法避免重复计算,例如:
    _cache.GetOrCreate("user_123", entry => { entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5); return LoadUserFromDb(123); });

设置缓存过期与优先级

MemoryCache 支持多种过期方式和清理控制:

  • 绝对过期:指定固定过期时间,如 entry.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(30);
  • 滑动过期:每次访问重置计时器,适合活跃数据,如 entry.SlidingExpiration = TimeSpan.FromMinutes(2);
  • 缓存优先级:内存紧张时低优先级项更早被移除,如 entry.Priority = CacheItemPriority.Low;
  • 取消令牌:可绑定 CancellationToken 实现主动失效,比如监听配置变更

注意事项和常见问题

实际使用中容易忽略但关键的点:

  • 缓存对象必须是线程安全可读写的;如果存的是 List 或 Dictionary,外部修改会影响缓存内容,建议存不可变对象或深拷贝
  • IMemoryCache 是进程内缓存,不跨应用实例,集群部署需搭配 Redis 等分布式缓存
  • 避免缓存大对象(如整个文件流、大集合),会快速消耗内存;可考虑分页缓存或压缩
  • 调试时可通过 _cache.Count 查看当前缓存项数量(仅限 MemoryCache 实例,接口无此属性)

基本上就这些。用好 IMemoryCache 不复杂但容易忽略细节,关键是按需设过期、合理封装访问逻辑、注意对象生命周期。


# redis  # microsoft  # 常见问题  # c#  # 内存占用  # .net  # red  # 分布式  # count  # 命名空间  # 封装  # 构造函数  # bool  # 接口  # public  # private  # 线程  # var  # 对象  # 令牌  # 的是  # 只需  # 计时器  # 分页  # 可通过  # 仅限  # 绑定  # 用好  # 移除 


相关文章: 如何在自有机房高效搭建专业网站?  如何打造高效商业网站?建站目的决定转化率  建站之星3.0如何解决常见操作问题?  动图在线制作网站有哪些,滑动动图图集怎么做?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何使用Golang table-driven基准测试_多组数据测量函数效率  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何在Windows服务器上快速搭建网站?  香港服务器租用每月最低只需15元?  PHP正则匹配日期和时间(时间戳转换)的实例代码  Swift中swift中的switch 语句  ,在苏州找工作,上哪个网站比较好?  常州企业建站如何选择最佳模板?  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何通过NAT技术实现内网高效建站?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  如何通过WDCP绑定主域名及创建子域名站点?  内部网站制作流程,如何建立公司内部网站?  如何零成本快速生成个人自助网站?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  济南企业网站制作公司,济南社保单位网上缴费步骤?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  表情包在线制作网站免费,表情包怎么弄?  如何通过IIS搭建网站并配置访问权限?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何在万网开始建站?分步指南解析  ,怎么在广州志愿者网站注册?  如何在Windows 2008云服务器安全搭建网站?  php json中文编码为null的解决办法  如何在阿里云完成域名注册与建站?  如何高效利用亚马逊云主机搭建企业网站?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  建站主机如何选?性能与价格怎样平衡?  官网网站制作腾讯审核要多久,联想路由器newifi官网  平台云上自主建站:模板化设计与智能工具打造高效网站  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  建站之星展会模版如何一键下载生成?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  如何快速查询网址的建站时间与历史轨迹?  如何在阿里云通过域名搭建网站?  北京网站制作网页,网站升级改版需要多久?  如何解决VPS建站LNMP环境配置常见问题?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何用wdcp快速搭建高效网站?  如何在IIS中新建站点并配置端口与IP地址?  建站ABC备案流程中有哪些关键注意事项?  如何基于云服务器快速搭建个人网站?  大型企业网站制作流程,做网站需要注册公司吗?  建站主机选购指南:核心配置优化与品牌推荐方案 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。