ASP.NET缓存:概述
缓存技术的应用是架构高性能、可收缩WEB应用程序的重要因素之一。它可以将数据对象、页、页的某部分缓存或者存储在web服务器、请求流的代理服务器或浏览器上,避免重新创建满足先前请求的信息,尤其是那些需要大量处理器时间或资源的信息。
ASP.NET提供了页输出缓存和应用程序缓存两种基本缓存机制。
- 页输出缓存
页输出缓存在内存中存储处理后的 ASP.NET 页的内容。 这可让 ASP.NET 向客户端发送页响应,而不必再次经过页处理生命周期。 页输出缓存对于那些不经常更改,但需要大量处理才能创建的页特别有用。 例如,如果创建大通信量的网页来显示不需要频繁更新的数据,页输出缓存则可以极大地提高该页的性能。 可以分别为每个页配置页缓存,也可以在 Web.config 文件中创建缓存配置文件。利用缓存配置文件,只定义一次缓存设置就可以在多个页中使用这些设置。
页输出缓存提供了两种页缓存模型:整页缓存和部分页缓存。 整页缓存将保留页的全部内容,并使用缓存页内容来完成客户端请求。 分页缓存将保留页的指定部分,并允许动态创建页的其他部分。
部分页缓存可采用两种工作方式:控件缓存和缓存后替换。 控件缓存有时也称为分段缓存,这种方式允许将信息包含在一个用户控件内,然后将该用户控件标记为可缓存的,以此来缓存页输出的部分内容。 这一方式可缓存页中的特定内容,并不缓存整个页,因此需要在每个请求上重新创建整个页。 例如,如果要创建一个显示大量动态内容(如股票信息)的页,其中有些部分为静态内容(如每周总结),这时可以将静态部分放在用户控件中,并指定已缓存这些内容。
缓存后替换与控件缓存正好相反。 这种方式缓存整个页,但页中的各段都是动态的。 例如,如果要创建一个在规定时间段内为静态的页,则可以将整个页设置为进行缓存。 如果向页添加一个显示用户名的 Lable控件,则对于每次页刷新和每个用户而言,Label的内容都将保持不变,始终显示缓存该页之前请求该页的用户的姓名。 但是,使用缓存后替换机制,可以将页配置为进行缓存,但将页的个别部分标记为不可缓存。 在此情况下,可以向不可缓存部分添加 Label控件,这样将为每个用户和每次页请求动态创建这些控件。
- 应用程序缓存
应用程序缓存提供了一种编程方式,可通过键/值对将任意数据存储在内存中。 使用应用程序缓存与使用应用程序状态类似。 但是,与应用程序状态不同的是,应用程序缓存中的数据是易失的, 即数据并不是在整个应用程序生命周期中都存储在内存中。 使用应用程序缓存的优点是由 ASP.NET 管理缓存,它会在项过期、无效、或内存不足时移除缓存中的项。 还可以配置应用程序缓存,以便在移除项时通知应用程序。
使用应用程序缓存的模式是,确定在访问某一项时该项是否存在于缓存中,如果存在,则使用。 如果该项不存在,则可以重新创建该项,然后将其放回缓存中。 这一模式可确保缓存中始终有最新的数据。