ASP.NET Cache 对象设计用于保证它并不使用过多的服务器内存。结果是,当用内存变得缺乏时,Cache对象自动删除最少被使用的项。你可以通过定义时间限制、依赖项、以及项
在Cache对象中的优先级来影响 Cache对象保存和删除项的方式。
Cache对象中的项只要是依赖或时间限制被触发,就是立即被删除。试图获取被删除的项将返回null值,除非项再次被添加到 Cache对象中。
绝对期限
你可以使用 AbsoluteEXpiration 参数为项定义最大的绝对生存期。此参数是 DateTime 类型的参数,允许你指定项过期的时间。
我在下面的代码指定了从创建起5分钟后,myValue 从 Cache 对象中被删除:
Cache.Insert("myKey", myValue, null, DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration);
滑动期限
你可以通过使用 SlidingExpiration 参数为项定义最大的相对生存期。这是一个 TimeSpan 类型参数,允许你指定每个对象自从最后一次访问后的时间间隔以及何时对象到期。
我在下面的代码指定了 myValue 最后的访问的20分钟后被从 Cache对象中删除:
Cache.Insert("myKey", myValue, null, null, TimeSpan.FromSeconds(20));
依赖项
有时你想某对象从 Cache对象中被删除,因为支持的项,如文件已经改变。ASP.NET 允许你基于依赖项或另一个缓存的项来定义缓存项的合法性。基于外部文件和目录的依赖项被
称为文件依赖项,依赖于另一个缓存项的依赖项被称为键依赖项。如果依赖项改变,缓存的项被称为不合法,然后从Cache对象中删除。
我在下面的代码指定了当 myDoc.xml 文件更改时,myValue 从 Cache对象中删除:
Cache.Insert("myKey", myValue, new CacheDependency(Server.MapPath("myDoc.xml")));
缓存项优先级
当网络服务器运行的内存可用量降低时,Cache对象有选择地删除项以释放系统内存。你指定高一点优先级的项较低可能从缓存中被删除,而被指定为低一些优先级的项被删除的可能性就要大一些。
我在下列代码指定了 myValue 有高优先级,将成为当服务器内存被限制时,最后从 Cache对象删除的项之一:
Cache.Insert("myKey", myValue, null, null, Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);
设置 Cache.Insert 中参数的示例
下列代码将一个 MyBook 的值使用许多参数插入到了 Cache对象中。下列首先发生的依赖项或超 时事件将使项被从 Cache对象中删除:
在保存5分钟后被删除。
在最后访问30秒钟后被删除。
在 Books.xml 文件更改后删除。
将项的优先级设置为高,从而如果服务器资源成为问题时最后被删除。
当项被从 Cache对象删除时,回调函数onRemove 运行。
Cache.Insert("MyBook.CurrentBook", CurrentBook, new CacheDependency(Server.MapPath("")), DateTime.Now.AddMinutes(5), TimeSpan.FromSeconds(30), CacheItemPriority.High, onRemove);