如何在.NET Framework 4客户端配置文件中实现缓存?
在.NET Framework 4客户端配置文件中配置缓存的方法
嘿,这就给你梳理清楚在.NET Framework 4客户端应用里通过配置文件实现缓存的步骤~ 咱们用的是System.Runtime.Caching命名空间下的缓存API,它摆脱了对ASP.NET环境的依赖,完全适配客户端应用场景。
1. 先搞定程序集引用
首先得在你的项目里引用System.Runtime.Caching程序集——这是基础操作,没它的话后续的配置和代码都跑不起来。
2. 在app.config中添加缓存配置
你需要在配置文件的<configuration>节点下先注册缓存的配置节,再添加具体的缓存规则。这里给你一个完整的配置示例,直接抄过去改参数就行:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- 注册缓存配置节,让.NET能识别后续的缓存配置 --> <configSections> <section name="system.runtime.caching" type="System.Runtime.Caching.Configuration.CacheSection, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </configSections> <!-- 具体的缓存配置项 --> <system.runtime.caching> <memoryCache> <!-- 命名缓存实例,你可以自定义名称,比如改成"ClientAppCache" --> <namedCaches> <add name="Default" cacheMemoryLimitMegabytes="100" <!-- 缓存最多占用100MB内存 --> physicalMemoryLimitPercentage="20" <!-- 最多占用系统物理内存的20% --> pollingInterval="00:02:00" /> <!-- 每2分钟检查一次内存使用情况,触发清理 --> </namedCaches> </memoryCache> </system.runtime.caching> </configuration>
给你解释下关键配置项:
cacheMemoryLimitMegabytes:设置缓存能使用的最大内存量(单位MB),超过这个阈值后,缓存会自动回收旧条目。physicalMemoryLimitPercentage:设置缓存允许占用的物理内存占比(范围0-100),当系统内存使用率达到这个比例时,缓存会启动清理机制。pollingInterval:缓存系统检查内存状态的时间间隔,格式是hh:mm:ss。
3. 在代码里用上配置好的缓存
配置完成后,就可以在客户端代码里通过MemoryCache类调用缓存了,示例代码如下:
using System.Runtime.Caching; // 获取配置好的默认缓存实例 var cache = MemoryCache.Default; // 往缓存里加一个条目,10分钟后过期 cache.Add("UserSettings", "{\"Theme\":\"Dark\"}", DateTimeOffset.Now.AddMinutes(10)); // 从缓存里取数据 var userSettings = cache.Get("UserSettings") as string; // 如果你配置了自定义名称的缓存实例(比如叫"CustomCache"),可以这样获取 var customCache = new MemoryCache("CustomCache");
4. 一些实用注意事项
- 客户端应用的缓存是进程内缓存,应用关闭后缓存内容就会丢失,这点要注意。
- 如果没在配置文件里自定义规则,
MemoryCache.Default会用默认设置:默认物理内存限制是90%左右,检查间隔2分钟。 - 要是需要更精细的缓存策略(比如依赖文件变化、滑动过期),可以用
CacheItemPolicy来设置,举个例子:
var policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddHours(1), // 1小时后绝对过期 SlidingExpiration = TimeSpan.FromMinutes(30) // 如果30分钟内没被访问,就过期 }; cache.Add("TempData", "TemporaryValue", policy);
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

