1. INTRODUCTION
  大量的网站页面是采用动态的方式,根据用户提交的不同请求创建生成页面。正如我们所知的,动态页面有助于根据用户要求来提供定制的动态内容。动态页面也利于获取在数据库中每时每刻更新的资料。缺点是为每个用户请求生成同一页面增加了系统开销。
  ASP.NET 提供了缓存技术有助于我们最大程度地解决这个问题。它能缓存输出的页面,保存在存储器当中,缓存用户请求的内容。缓存的特点可以根据不同方式来定制的。
  本文主要介绍ASP.NET的缓存技术。介绍其使用方法,以及客户端缓存存在的问题。
  2. ASP.NET CACHE
  缓存是把应用程序中需要频繁、快速访问的数据保存在内存中的编程技术。ASP.NET提供三种主要形式的缓存:页面级输出缓存、用户控件级输出缓存(或称为片段缓存)和缓存API。输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用这两种缓存就足够了。而缓存API则提供了额外的灵活性(实际上是相当大的灵活性),可用于在应用程序的每一层利用缓存。本文只介绍页面级缓存和用户控件级缓存。
  2.1. Page Caching
  作为最简单的缓存形式,输出缓存只是在内存中保留为响应请求而发送的 HTML 的副本。其后再有请求时将提供缓存的输出,直到缓存到期,这样,性能有可能得到很大的提高(取决于需要多少开销来创建原始页面输出 - 发送缓存的输出总是很快,并且比较稳定)。
  要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可:
  <%@ OutputCache Duration="60" VaryByParam="*" %>
  如同其他页面指令一样,该指令应该出现在ASPX页面的顶部,即在任何输出之前。它支持五个属性(或参数),其中两个是必需的。
   Duration:必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。
   Location:指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之一:Any、Client、Downstream、None、Server 或 ServerAndClient。
   VaryByParam:必需属性。Request 中变量的名称,这些变量名应该产生单独的缓存条目。"none" 表示没有变动。"*" 可用于为每个不同的变量数组创建新的缓存条目。变量之间用 ";" 进行分隔。
   VaryByHeader:基于指定的标头中的变动改变缓存条目。
   VaryByCustom:允许在 global.asax 中指定自定义变动(例如,"Browser")。
  利用必需的 Duration 和 VaryByParam 选项的组合可以处理大多数情况。例如,如果您的产品目录允许用户基于 categoryID 和页变量查看目录页,您可以用参数值为 "categoryID;page" 的 VaryByParam 将产品目录缓存一段时间(如果产品不是随时都在改变,一小时还是可以接受的,因此,持续时间是 3600 秒)。这将为每个种类的每个目录页创建单独的缓存条目。每个条目从其第一个请求算起将维持一个小时。
  VaryByHeader 和 VaryByCustom 主要用于根据访问页面的客户端对页面的外观或内容进行自定义。同一个 URL 可能需要同时为浏览器和移动电话客户端呈现输出,因此,需要针对不同的客户端缓存不同的内容版本。或者,页面有可能已经针对 IE 进行了优化,但需要能针对 Netscape 或 Opera 完全降低优化(而不仅仅是破坏页面)。
  2.2. Fragment caching
  ASP.NET提供了部分缓存或区域缓存Web表单的功能。当希望在特定的页面上实现对缓存更多的控制时,可以使用该技术。
  为了指定应该被缓存的用户控件,我们利用 @OutputCache 指令,就象整个页面缓存的用法一样。
  <%@ OutputCache Duration=10 VaryByParam="*" %>
  该示例将缓存用户控件60秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。
  <%@ OutputCache Duration="60" VaryByParam="none"
  VaryByControl="CategoryDropDownList" %>
  该示例将缓存用户控件60秒,并且将针对CategoryDropDownList控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。
  还可以通过设置属性Shared=”true”,让使用它的所有页面共享这个控件缓存。
  3. CONCLUSION AND SUGGESTION
  应该在应用程序的每一层都实现缓存。向数据层、业务逻辑层、UI 或输出层添加缓存支持。内存现在非常便宜 — 因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很大的性能提高。
  缓存是一种无需大量时间和分析就可以获得“足够良好的”性能的方法。这里再次强调,内存现在非常便宜,因此,如果您能通过将输出缓存 30 秒,而不是花上一整天甚至一周的时间尝试优化代码或数据库就可以获得所需的性能,您肯定会选择缓存解决方案(假设可以接受 30 秒的旧数据)。缓存正是那些利用 20% 付出获得 80% 回报的特性之一,因此,要提高性能,应该首先想到缓存。不过,如果设计很糟糕,最终却有可能带来不良的后果,因此,您当然也应该尽量正确地设计应用程序。但如果您只是需要立即获得足够高的性能,缓存就是您的最佳选择,您可以在以后有时间的时候再尽快重新设计应用程序。
  ASP.NET缓存和IE缓存并不是同一个概念,IE缓存可能会导致错误发生,而且很难控制,可以考虑禁止IE缓存,而只采用ASP.NET缓存机制。
  针对我们的Web系统的特殊性,存在大量的页面针对不同的用户显示不同的数据,因此在采用ASP.NET缓存机制时,请格外小心。可以考虑在缓存机制使用时增加一些必要的参数。

转载于:https://www.cnblogs.com/hq2008/archive/2007/12/24/1012323.html

asp.net cache相关推荐

  1. 细说 ASP.NET Cache 及其高级用法

    阅读目录 开始 Cache的基本用途 Cache的定义 Cache常见用法 Cache类的特点 缓存项的过期时间 缓存项的依赖关系 - 依赖其它缓存项 缓存项的依赖关系 - 文件依赖 缓存项的移除优先 ...

  2. ASP.NET Cache的一些总结

    分享到... 复制网址邮件腾讯微博网易微博百度搜藏人人网开心网搜狐微博一键分享豆瓣新浪微博QQ空间MSN朋友网淘江湖查看更多(120) 这是什么工具? JiaThis 分享到各大网站 一键分享猜你喜欢 ...

  3. 简单介绍ASP中Cache技术的应用

    ASP从发布至今已经7年了,使用ASP技术已经相当成熟,自从微软推出了ASP.NET之后就逐渐停止了对ASP版本的更新.但是由于有很多人仍然习惯使用ASP来开发网站,所以,再次我将以一个简单的例子来说 ...

  4. asp.net Cache缓存定时更新数据

    asp.net教程 这个就先需要先知道一下System.Web.Caching.Cache类,其实在我做WEB应用的时候,我会将一些使用频繁但是又要经常使用并且需要急时更新的对象放到Cache中,这样 ...

  5. ASP.NET Cache缓存管理基于web的缓存

    <%@ OutputCache Location="Any" 输出缓存可以位于发出请求的客户端浏览器,代理服务器,处理请求的服务器,对应于HttpCacheability.p ...

  6. 在asp.net中如何管理cache

    本文申明:本人凭着对英文和技术的热爱,根据自己有限的英文水平通过翻译文章以达到提高自身能力,如果有什么地方不对的,希望大家提意见. 目的:这篇文章将描述在asp.net中如何管理cache以及cach ...

  7. Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache

    在ASP.NET中有两个类都提供缓存支持, 一个是HttpRuntime类的Cache属性, 另一个是HttpContext类的Cache属性. 通过查看这两个属性的类型可以发现其实这两个属性都是Sy ...

  8. cache:缓存在asp.net中如何管理?服务器端缓存?Session, Application, Cache objectscache ,客户端缓存?Cookies,ViewState...

    本文申明:本人凭着对英文和技术的热爱,根据自己有限的英文水平通过翻译文章以达到提高自身能力,如果有什么地方不对的,希望大家提意见. 目的:这篇文章将描述在asp.net中如何管理cache以及cach ...

  9. 在ASP.NET 中实现单用户登录(利用Cache, 将用户信息保存在服务器缓存中)[转]

    Technorati 标签: asp.net,cache 由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录.在ASP.NET中实现单点登录其实很简单,下 ...

最新文章

  1. 如何优雅的关闭容器,看这一篇就够了
  2. Galaxy v-21.01 发布,新的流程和历史栏体验
  3. VS如何更改项目类型?
  4. wxWidgets:wxDynamicLibrary类用法
  5. 償債基金(Sinking fund)
  6. Hive学习之路 (一)Hive初识
  7. c语言枚举类型例题_[开源资讯]Zig 0.6.0 发布,想要挑战 C 语言
  8. window.addeventlistener 不能调用方法_Java入门第十四课:如何定义”方法“
  9. 查看linux服务器版本
  10. 手把手教你调试Linux C++ 代码(一步到位包含静态库和动态库调试)
  11. 软件_迅速增加博客友情链接[博]
  12. 机器学习入门——图解支持向量机
  13. [RK3399][Android7.1] 调试笔记 --- 查看当前DDR的工作频率
  14. SecureCRT下载、安装、激活
  15. STM32 下载调试口(JTAG+SWD)禁用及作为普通IO口
  16. 分布式图数据库-JanusGraph简介
  17. 实现家庭WiFi网络全覆盖
  18. CAD2015 C#二次开发 字体变形
  19. 什么是 PHP? 为什么用 PHP? 有谁在用 PHP?
  20. python的分布式爬虫框架

热门文章

  1. ML_Logistic_Regression
  2. 十三、IntelliJ IDEA 中的版本控制介绍(下)
  3. cPanel下安装GodaddySSL教程
  4. 使用Oracle中fileopen命令加载文件时遇到的怪问题(转)
  5. 《孙鑫老师谈如何学好编程》摘要
  6. R语言 非中心化F分布
  7. 记一次内核模块查看 - 初步通过文件厂商判断有无可疑内核模块
  8. VC++ .Net 实例学习
  9. 用按键精灵自动消除行号失败记
  10. 11 mybatis-高级应用