ASP.NET 缓存(4)

ASP.NET可让你把一组页面采用相同的缓存设置,你只须要在web.config文件定义缓存设置,将这些设置关联一个name,而后把这个name应用到页面上去便可。
看以下的web.configweb

<configuration>
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="ProductItemCacheProfile" duration="60" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
...
</system.web>
</configuration>
You can now use this profile in a page through the CacheProfile attribute:算法

在页面中,你能够经过CacheProfile 属性来设置Cache。以下
<%@ OutputCache CacheProfile="ProductItemCacheProfile" VaryByParam="None" %>数据库

若是你想设置其余的缓存细节,好比VaryByParam行为,你能够在OutputCache指令设置属性,或者在配置文件中加一个<add>标签。缓存

你也能够经过web.config文件配置更多的ASP.NET缓存细节。不少选项可以让调试更方便,可是在产品应用中没多大的感受。服务器

配置这些设置,使用<caching>元素中的<cache>元素来描述。<cache> 提供了一些选项来调节。以下:
<configuration>
<system.web>
<caching>
<cache disableMemoryCollection="true|false"
disableExpiration="true|false"
percentagePhysicalMemoryUsedLimit="90"
privateBytesLimit="0"
privateBytesPollTime="00:02:00"
/>
...
</caching>
</system.web>
...
</configuration> 架构

使用disableMemoryCollection 和disableExpiration 可让ASP.NET在内存不足的时候中止收集缓存,而且移除过时的缓存项。请当心的使用这些这些设置,由于可能会致使你的应用程序内存耗尽。分布式

使用percentagePhysicalMemoryUsedLimit来设置ASP.net可使用做为缓存的最大内存量,是一个百分比。当缓存到达你设置的值,ASP.NET开始积极的清除过期的和最少使用的缓存项。该值设为0意味着不须要内存来缓存,ASP.NET将会尽快的删除他所增长的缓存。默认值是90,使用可用内存的90%来做为缓存。 ide

privateBytesLimit 设置了在ASP.NET开始清除到期的数据项并试图回收内存以前,能够占用的最大的内存字节数。默认值是0.这表示ASP.NET会使用本身的算法来决定何时开始回收内存。memcached

privateBytesPollTime 设置了ASP.NET检查内存使用状况的间隔时间。默认的轮询时间是2分钟。性能

ASP.NET缓存模型使用简单并且很是快速,由于缓存服务运行在ASP.NET进程中,数据则存储在物理内存。

可是ASP.NET缓存系统对于大数据量,长时间的缓存则效率不是很高。好比,一个大企业的持续增加的产品目录。假设产品目录改变不是很频繁,你可能想要缓存缓存数以千计的产品页面,如此多的数据,使用服务器内存将会产生风险。此时,最好是能使用其余的存储,比内存慢可是比从新建立页面快,最有可能的方案包括基于磁盘的存储,基于数据库的存储,或者分布式存储系统例如Windows Server AppFabric。

任何形式的外部缓存存储都会比常规的内存缓存慢,有些存储选项甚至有潜在瓶颈而且缺乏可扩展性。在你使用非基于内存的缓存时候,你须要仔细的评估这个缓存系统的性能,速度和扩展性。

在之前,外部缓存系统是能实现的,可是他们的实现是彻底的和ASP.NET分离的,因此,每一个第三方的缓存方案都有本身的API。可是ASP.NET4将提供者模型加入到缓存中,容许你用不一样的数据存储插入到缓存。可是要注意的,ASP.NET不提供任何预先建立的缓存提供者。可是,ASP.NET团队的一些成员演示了一个原型,使用基于文件的缓存和Windows Server AppFabric。ASP.NET架构师也保证发布这些代码样例来展现如何和memcached整合。