.Net——缓存机制(一):利用Dictionary模拟缓存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了.Net——缓存机制(一):利用Dictionary模拟缓存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1459字,纯文字阅读大概需要3分钟。
内容图文
在计算机的硬件设计中,有一个被反复使用的思想——缓存。同样,在软件设计中,这个思想也可以用来解决数据读取非常耗时带来的性能问题(当然,在时间和空间上,我们要寻找一个平衡点)。
首先来看理想的缓存应该是怎么描述的:
static Func<T, R> Cache<T, R>(Func<T, R> func) { var mem = new Dictionary<T, R>(); return x => { if (!mem.ContainsKey(x)) { Console.WriteLine("未缓存,正在缓存!"); mem[x] = func(x); } return mem[x]; }; }
大致就是给进去一个T,然后吐出来一个R。
run下看看:
#region 利用字典来实现对函数的缓存 var cacheFunc = Cache<int, int>(DoSomeTing); Console.WriteLine(cacheFunc(10)); Console.WriteLine(cacheFunc(5)); Console.WriteLine(cacheFunc(10)); Console.ReadKey(); #endregion
其中,DoSomeThing是可以是一个读取数据库的操作,复杂的计算操作等等,在这里,只写了个简单的意思下:
static int DoSomeTing(int a) { return a * a; }
接下来的函数就比较有意思了,试想下,如果dictionary的value值为一个字典类型数据呢?
static Func<int, int, int> DoSomeTing() { var dic=new Dictionary<int,Dictionary<int,int>>(); return (a,b)=>{ if (!dic.ContainsKey(a)) { Console.WriteLine("a为{0}和b为{1}未进行缓存!",a,b); dic[a]=new Dictionary<int,int>(); dic[a][b]=a+b; }else { if (!dic[a].ContainsKey(b)) { Console.WriteLine("a为{0}已经缓存,b为{1}未进行缓存,正在缓存中",a,b); dic[a][b]=a+b; } } return dic[a][b]; }; }
run下看看:
//var sfunc = DoSomeTing(); var sfunc=Cache<int,Func<int,int>>(x=>Cache<int,int>(y => x+y)); Console.WriteLine(sfunc(10)(5)); Console.WriteLine(sfunc(5)(10)); Console.WriteLine(sfunc(10)(5)); Console.ReadKey();
对字典的字典进行缓存是不是有一点儿缓存依赖的意思?
原文:http://blog.csdn.net/lhc1105/article/details/45727115
内容总结
以上是互联网集市为您收集整理的.Net——缓存机制(一):利用Dictionary模拟缓存全部内容,希望文章能够帮你解决.Net——缓存机制(一):利用Dictionary模拟缓存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。