zoukankan      html  css  js  c++  java
  • Enterprise Library5.0 缓存使用篇

    网上有很多资料讲解怎么使用,主要是在是使用时碰到一个很郁闷的错误,一下内容有摘抄的博友的有自己写的,大家将就看吧。

    创建 cachingConfiguration 的配置节处理程序时出错: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    这个错误刚开始是以为没有装.net3.5 SP1的事呢,装上也不行,最后发现用EntLibConfig.exe打开他自己生成的config配置文件业报同样的错误,

    初步怀疑是生成的config配置文件有问题,在生成一个还是报同样的错误,等生成第三遍的时候在打开没有报错,服务到应用程序目录,一切正常。

    简单使用代码:

     1        public Form1()
     2         {
     3             InitializeComponent();
     4         }
     5 
     6         ICacheManager cacheManager;
     7 
     8         private void button1_Click(object sender, EventArgs e)
     9         {
    10             AbsoluteTime _ExpireTime = new AbsoluteTime(DateTime.Now.AddSeconds(30));//指定30秒后过期
    11 
    12             cacheManager.Add("aaa1""aaa1_value", CacheItemPriority.Normal, null, _ExpireTime);//加入缓存
    13         }
    14 
    15         private void Form1_Load(object sender, EventArgs e)
    16         {
    17             cacheManager = CacheFactory.GetCacheManager("Cache Manager");//实例化ICachemanager
    18         }
    19 
    20         private void button2_Click(object sender, EventArgs e)
    21         {
    22             this.richTextBox1.Text = cacheManager.GetData("aaa1").ToString();
    23         }

    下面介绍如何使用Microsoft Enterprise Library 5.0中的缓存应用程序模块.

    1.下载安装好MicrosoftEnterprise Library 5.0,然后在运行EntLibConfig.exe

      2.  选择Blocks菜单 ,单击 Add CachingSettings .

          配置属性说明:

        3.  点击 File 菜单,单击 Save,保存为一个App.config文件,可以先保存到桌面,之后要用到它. 用记事本打开App.config,可以看到如下内容.

        <configuration>
          
        <configSections>
            
        <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null" requirePermission="true" />
          
        </configSections>
          
        <cachingConfiguration defaultCacheManager="Cache Manager">
            
        <cacheManagers>
              
        <add name="Cache Manager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
                  expirationPollFrequencyInSeconds
        ="60" maximumElementsInCacheBeforeScavenging="1000"
                  numberToRemoveWhenScavenging
        ="10" backingStoreName="NullBackingStore" />
            
        </cacheManagers>
            
        <backingStores>
              
        <add name="Isolated Storage Cache Store" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.IsolatedStorageBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
                  encryptionProviderName
        ="" partitionName="asdfsdf" />
              
        <add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
                  name
        ="NullBackingStore" />
            
        </backingStores>
          
        </cachingConfiguration>
        </configuration>

        EnterpriseLibrary的Cache提供了非常强大的支持,可以设置绝对时间、间隔时间、自定义格式以及文件过期时间来进行相应的更新操作。

                1. 绝对时间过期的缓存:AbsoluteTime

                2. 相对时间过期的缓存:SlidingTime

                3. 自定义格式过期的缓存:ExtendedFormatTime

                   自定义格式为:<Minute> <Hour> <Day of month> <Month> <Day of week>

                   Minute            0-59
                   Hour              0-23
                   Day of month     1-31
                   Month             1-12
                   Day of week       0-6 (Sunday is 0)
                   如:
                   * * * * *    - expires every minute
                   5 * * * *    - expire 5th minute of every hour 
                   * 21 * * *   - expire every minute of the 21st hour of every day
                   31 15 * * *  - expire 3:31 PM every day
                   7 4 * * 6    - expire Saturday 4:07 AM

                4.文件依赖:FileDependency    指定缓存依赖于某一文件
                   FileDependency _fileDep = new FileDependency("R:\\1.txt");//指定缓存依赖于某一文件
                  
        写入缓存数据时如果使用了FileDependency方式,最终的效果会让缓存是否过期依赖于某一个具体的文件,只要这个文件没有修改,缓存一直

                   有效,反之如果这个文件被修改过了,则缓存立即过期。

                5.永不过期:NeverExpired

        使用如:

        //绝对时间过期的缓存
         AbsoluteTime _ExpireTime = new AbsoluteTime(DateTime.Now.AddSeconds(30));//指定30秒后过期

        //自定义格式过期的缓存
        ExtendedFormatTime expireTime = new ExtendedFormatTime("41 11 * * *");

                Cache以配置文件的方式供用户进行缓存的轮询过期数据的频率、缓存中数据项的多少、清除数据项的多少以及缓存备份的位置。

         1.    expirationPollFrequencyInSeconds: 设置控制后台调度程序多久检查过期条目的定时器。此属性必须是正整数,且是必要的。
         2.    maximumElementsInCacheBeforeScavenging: 设置在清除开始前可以在缓存中的条目的最大数量。此属性必须是正整数,且是必要的。 
         3.    numberToRemoveWhenScavenging: 设置在清除开始时移除的条目的数量,此属性必须是正整数,且是必要的。 
         4.    backingStoreName: 缓存备份的位置

                值得一提的是,expirationPollFrequencyInSeconds属性是控制后台调度程序多久检查过期条目的配置,单位为秒,如果系统经常需要更新数据则可以将此值设置的小一点;ICacheItemExpiration的时间是以UTC的时间来作为标准时间来比较的,北京时间比UTC早8个小时,比如你需要在每天的十二点半让缓存过期,则必须这样设置ExtendedFormatTime("30 4 * * *"), 关于这个问题我本来不知道,以为是Library的Bug,上网也没有找到相关的例子,最后在看了原程序才知道Library是用的UTC来进行比较的。

      1. 相关阅读:
        HDU 5313 bitset优化背包
        bzoj 2595 斯坦纳树
        COJ 1287 求匹配串在模式串中出现的次数
        HDU 5381 The sum of gcd
        POJ 1739
        HDU 3377 插头dp
        HDU 1693 二进制表示的简单插头dp
        HDU 5353
        URAL 1519 基础插头DP
        UVA 10294 等价类计数
      2. 原文地址:https://www.cnblogs.com/xiangboren/p/2105585.html
      Copyright © 2011-2022 走看看