博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Winform]缓存处理
阅读量:5939 次
发布时间:2019-06-19

本文共 3784 字,大约阅读时间需要 12 分钟。

摘要

在对winform做的项目优化的时候,首先想到的是对查询,并不经常变化的数据进行缓存,但对web项目来说有System.Web.Caching.Cache类进行缓存,那么winform端该如何呢?你可能会想到,存到文件中,但那可能有问题,文件操作权限问题,IO操作性能问题。

解决办法

针对exe的项目,可以使用MemoryCache这个类,进行内存级别的缓存。

辅助类

///     /// 基于MemoryCache的缓存辅助类    ///     public static class MemoryCacheHelper    {        private static readonly Object _locker = new object();        public static T FindCacheItem
(string key, Func
cachePopulate, TimeSpan? slidingExpiration = null, DateTime? absoluteExpiration = null) { if (String.IsNullOrWhiteSpace(key)) { throw new ArgumentException("Invalid cache key"); } if (cachePopulate == null) { throw new ArgumentNullException("cachePopulate"); } if (slidingExpiration == null && absoluteExpiration == null) { throw new ArgumentException("Either a sliding expiration or absolute must be provided"); } if (MemoryCache.Default[key] == null) { lock (_locker) { if (MemoryCache.Default[key] == null) { var item = new CacheItem(key, cachePopulate()); var policy = CreatePolicy(slidingExpiration, absoluteExpiration); MemoryCache.Default.Add(item, policy); } } } return (T)MemoryCache.Default[key]; } ///
/// 移除缓存 /// ///
public static void RemoveCache(string key) { MemoryCache.Default.Remove(key); } private static CacheItemPolicy CreatePolicy(TimeSpan? slidingExpiration, DateTime? absoluteExpiration) { var policy = new CacheItemPolicy(); if (absoluteExpiration.HasValue) { policy.AbsoluteExpiration = absoluteExpiration.Value; } else if (slidingExpiration.HasValue) { policy.SlidingExpiration = slidingExpiration.Value; } policy.Priority = CacheItemPriority.Default; return policy; } }

测试

class Program    {        static void Main(string[] args)        {            string cacheKey = "person_key";            Person p = MemoryCacheHelper.FindCacheItem
(cacheKey, () => { return new Person() { Id = Guid.NewGuid(), Name = "wolfy" }; }, new TimeSpan(0, 30, 0)); if (p != null) { Console.WriteLine(p.ToString()); } Console.WriteLine("获取缓存中数据"); Person p2 = MemoryCacheHelper.FindCacheItem
(cacheKey, () => { return new Person() { Id = Guid.NewGuid(), Name = "wolfy" }; }, new TimeSpan(0, 30, 0)); if (p2 != null) { Console.WriteLine(p2.ToString()); } MemoryCacheHelper.RemoveCache(cacheKey); Person p3 = MemoryCacheHelper.FindCacheItem
(cacheKey, () => { return new Person() { Id = Guid.NewGuid(), Name = "wolfy" }; }, new TimeSpan(0, 30, 0)); if (p3 != null) { Console.WriteLine(p3.ToString()); } Console.Read(); } } public class Person { public Guid Id { set; get; } public string Name { set; get; } public override string ToString() { return Id.ToString() + "\t" + Name; } }

参考

转载于:https://www.cnblogs.com/wolf-sun/p/7251343.html

你可能感兴趣的文章
branch prediction
查看>>
Python基础语法06--文件
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
java----代理机制或动态类的生成
查看>>
windows下命令行终端使用rz上传文件参数详解
查看>>
信息隐藏技术
查看>>
nginx禁止未绑定域名访问返回444
查看>>
c++重载后置++和--
查看>>
PostgreSQL远端访问
查看>>
WIN7如何替换开机登录画面
查看>>
AAuto如何发布EXE文件
查看>>
Linux下添加新硬盘,分区及挂载
查看>>
Cross-compilation using Clang
查看>>
营销系统--手动补偿
查看>>
图标字体设计
查看>>
【转】Principles of training multi-layer neural network using backpropagation
查看>>
并查集hdu1232
查看>>
改动Androidproject的名称(非Eclipse重命名)
查看>>
tomcat work目录的作用就是编译每个项目里的jsp文件为java文件如果项目没有jsp页面则这个项目文件夹为空...
查看>>
dedecms后台左侧菜单500错误怎么处理
查看>>