码迷,mamicode.com
首页 > Web开发 > 详细

.Net——缓存机制(一):利用Dictionary模拟缓存

时间:2015-05-14 23:56:04      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:缓存   dictionary   cache   .net   



      在计算机的硬件设计中,有一个被反复使用的思想——缓存。同样,在软件设计中,这个思想也可以用来解决数据读取非常耗时带来的性能问题(当然,在时间和空间上,我们要寻找一个平衡点)。


     首先来看理想的缓存应该是怎么描述的:


     

  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();


          对字典的字典进行缓存是不是有一点儿缓存依赖的意思?














.Net——缓存机制(一):利用Dictionary模拟缓存

标签:缓存   dictionary   cache   .net   

原文地址:http://blog.csdn.net/lhc1105/article/details/45727115

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!