iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ASP.NET缓存的工作原理
  • 365
分享到

ASP.NET缓存的工作原理

2023-06-17 16:06:51 365人浏览 独家记忆
摘要

这篇文章主要介绍“asp.net缓存的工作原理”,在日常操作中,相信很多人在ASP.net缓存的工作原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET缓存的工作原理”的疑惑有所帮助!接下来,请跟

这篇文章主要介绍“asp.net缓存的工作原理”,在日常操作中,相信很多人在ASP.net缓存的工作原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET缓存的工作原理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

缓存是在内存存储数据的一项技术,也是ASP.NET中提供的重要特性之一,对于程序员来讲,了解ASP.NET缓存的工作原理对于其设计程序是非常有用的。

ASP.NET需要被缓存的对象多种多样,包括从数据库中提取出来的数据,以及aspx页面生成的静态页,甚至是编译好的程序集。合理利用缓存能让ASP.NET的性能大幅提升,下面将对ASP.NET中的缓存机制进行简单概述。

缓存的分类

在ASP.NET中,大部分缓存机制是保存在cache对象中,也就是服务器内存的一部分。当用户请求数据时,如果数据已经被缓存,则用户所提取的数据直接从服务端返回,而不是从数据库等底层数据库提取。这对性能的提升不得不说很有帮助。下面来看ASP.NET中几种缓存机制。

程序集缓存

简单的说,这种缓存是ASP.NET自带的,无需开发人员进行参与的缓存方式。即当***次请求服务器时,Page类以及相关程序集被编译,当下次请求时,访问缓存后的编译而不是重新编译。CLR会自动检测代码的改变,如果代码改变后,当下次访问时,相关代码会被重新编译。

数据源缓存

数据源缓存,顾名思义,也就是利用数据源控件对获取的数据进行缓存的方式。这些控件包括sqlDataSource,ObjectDataSource等,作为抽象类的DataSourceControl暴漏了如下属性用于缓存:

ASP.NET缓存的工作原理

CacheDuration获取或设置以秒为单位的一段时间,数据源控件就在这段时间内缓存 SelectMethod 属性检索到的数据;CacheExpirationPolicy获取或设置缓存的到期行为,该行为与持续时间组合在一起可以描述数据源控件所用缓存的行为;CacheKeyDependency获取或设置一个用户定义的键依赖项,该键依赖项链接到数据源控件创建的所有数据缓存对象;EnableCaching 获取或设置一个值,该值指示 ObjectDataSource 控件是否启用数据缓存。

而使用起来就非常简单了,只需要将缓存的相关属性进行设置即可。比如我想要当前数据源缓存10秒,只需要设置EnableCaching属性和CacheDuration属性如下,这种方式的工作原理可以用下图表示:

ASP.NET缓存的工作原理

SQL Cache Dependency

大家应该注意到了上面的数据源控件还暴漏了CacheKeyDependency属性,这是用于实现SQL Cache Dependency的方式,关于Dependency,其实就是在数据库表内容改变时,将相应的缓存进行更新,正如Dependency这个词的意思一样,是缓存依赖底层数据库。下面就要说到两种实现SQL Cache Dependency的方法了。

方法一:使用轮流查询机制(polling-based)

这种方式实现机制是在SQL Server中插入以AspNet_SqlCacheNotification_Trigger开头的一个特殊的表和5个存储过程,当被监测的表数据发生改变时,则一个名为AspNet_SqlCacheTablesForChangeNotification的表被更新,而ASP.NET程序会根据用户设置的间隔时间每隔一定时间检查一下数据库内容是否更新,如果更新,则将缓存中的数据进行跟新。

使用起来就很简单了,可以在页面头部的OutputCache指令中设置,会社DataSource空间中进行设置,设置格式为:“数据库名:表名”.里面的表名即是需要监测是否改变的表名,示例如下:

<%@ OutputCache Duration="30" VaryByParam="none" SqlDependency="DatabaseName:tableName" %>

如果需要添加多个表,则用”;”进行分割

SqlDependency="database:table;database:table"

方法二:使用通知机制(notification-based)

使用通知机制配置起来要简便很多,但是sql server的版本需要9.0以上,也就是sql server 2005,使用这种方式需要将sql server的通知服务开启,使用通知机制可以对页面进行缓存,也可以对datasouce控件进行缓存,对页面进行缓存代码如下:

<%@ OutputCache Duration="30" VaryByParam="none" SqlDependency="CommandNotification" %>

注意SqlDependency必须设置成CommandNotification,对于datasource控件,也是同样:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"   ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"   SelectCommand="SELECT top 10 * FROM [Person].[Contact]" EnableCaching="true" CacheDuration="10" SqlCacheDependency="CommandNotification"></asp:SqlDataSource>

输出缓存(output Caching)

输出缓存是页面级别的缓存,是将aspx页面内容在***次请求后生成的静态页放入缓存,在不过期时间内每一次请求时从缓存中返回静态页,而不是重新走完ASP.NET的生命周期。可以将可以通过在页面头部加入OutputCache指令实现,也可以通过HttpCachePolicy类实现,输出缓存可以缓存整个页面,也可以缓存部分页面,缓存页面的一部分是通过用户控件来实现,下面来看通过OutputCache指令实现页面缓存,前面已经看到,这种方式十分简单,下面说一下OutputCache的重点属性:

Duration

页面过期的时间,单位为秒。超过过期时间后,则在下一次请求时页面会重新生成并缓存。

VaryByHeader  VaryByCustom  VaryByParam  VaryByControl  VaryByContentEncodings

这些属性都是为了保存页面的多个版本,比如说一个页面用于显示产品,则根据产品id的不同,缓存同一个页面的不同版本。

CacheProfile

这个选项有些像连接字符串,作用只是将具体的缓存选项变成对于选项的引用,比如我们在WEB.Config放入如下代码:

<caching>         <outputCacheSettings>           <outputCacheProfiles>             <add name="CacheProfile"                   enabled="true"                   duration="60"                    varyByParam="product:id"/>           </outputCacheProfiles>         </outputCacheSettings> </caching>

则在引用时只需要在页面头部设置如下:

<%@ OutputCache CacheProfile="CacheProfile" %>

DiskCacheable

因为服务器内存是有限的,所以通过将DiskCacheable属性设置为true,则可以将缓存页面放入硬盘中,这样即使服务器崩溃重启,缓存依然存在。

缓存部分页面

缓存页面的一部分实现原理和缓存整个页面毫无二致,都是在页面头部加入OutputCache指令,***的不同是缓存部分页面是在用户控件中进行的。这部分就不在多说了。

使用HttpCachePolicy缓存页面

前面已经说了通过OutputCache指令在页面头部设置缓存选项,另一种替代方法是使用HttpCachePolicy类,这个类的实例是Response.Cache.如果使用HttpCachePolicy设置缓存,则需要在页面移除OutputCache指令。比如:

<%@ OutputCache  Duration="30" VaryByParam="state;city" %>

和下面代码是等价的:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));  Response.Cache.VaryByParams["state"] = true;  Response.Cache.VaryByParams["city"] = true;

对象缓存

对象缓存是将继承与System.Object的对象缓存在服务器的内存中,通过Page类的Cache属性可以访问到Cache集合。Cache内可以放任何类型的对象,但是要小心使用Cache,因为Cache是占用服务器内存,如果使用不当,也许会拖累性能。使用Cache的例子:

//save object into Cache  Cache["table"] = GridView1;  //get object from Cache  GridView gv = (GridView)Cache["table"];

要注意的是,再提取缓存中的对象时,一定别忘了强制转换。

到此,关于“ASP.NET缓存的工作原理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: ASP.NET缓存的工作原理

本文链接: https://www.lsjlt.com/news/290599.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET缓存的工作原理
    这篇文章主要介绍“ASP.NET缓存的工作原理”,在日常操作中,相信很多人在ASP.NET缓存的工作原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET缓存的工作原理”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • PHP开发缓存的工作原理及实现方式
    PHP开发缓存的工作原理及实现方式缓存是一种常用的提升网站性能的技术手段,它可以将一些高频度访问的数据保存在内存中,以便于快速获取,减少数据库查询的次数,从而提高网站的响应速度。PHP开发中,缓存的实现方式有很多种,下面将详细介绍其工作原理...
    99+
    2023-11-07
    缓存 工作原理 实现方式 关键词:PHP开发
  • Python异步编程,你是否了解IDE缓存的工作原理?
    随着现代应用程序的复杂性不断增加,异步编程模型在Python编程中变得越来越流行。异步编程的主要目的是提高代码的并发性和性能。它可以允许多个任务同时执行,并且不会阻塞主线程。这篇文章将探讨Python异步编程中的IDE缓存工作原理,并提供...
    99+
    2023-08-24
    异步编程 ide 缓存
  • Git缓存在ASP和Unix系统上的工作原理是什么?
    Git缓存是Git版本控制系统中的一个重要概念,它在ASP和Unix系统上的工作原理是相似的。本文将介绍Git缓存的概念、作用以及在ASP和Unix系统上的工作原理,并提供一些演示代码来加深理解。 什么是Git缓存? Git缓存(也称为“...
    99+
    2023-08-24
    unix git 缓存
  • PHP中Memcache缓存原理及其对缓存数据的作用
    随着互联网的发展,数据量的快速增长,缓存技术的应用越来越广泛,它既可以提升网站的访问速度,也可以减轻服务器的负担。在服务器端,Memcache作为 PHP 缓存技术的一种,被广泛应用于大型网站的访问优化。本文将介绍 Memcache 缓存的...
    99+
    2023-05-15
    PHP Memcache缓存 缓存原理
  • Java内存的原型及工作原理是什么
    这篇文章给大家介绍Java内存的原型及工作原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。主要通过分析Java内存分配的栈、堆以以及常量池详细的讲解了其的工作原理。一、java虚拟机内存原型寄存器:我们在程序中...
    99+
    2023-06-17
  • MyBatis一级缓存与二级缓存原理与作用分析
    目录缓存的作用MyBatis 的缓存结构一级缓存二级缓存缓存的作用 在 Web 系统中,最重要的操作就是查询数据库中的数据。但是有些时候查询数据的频率非常高,这是很耗费数据库资源的,...
    99+
    2022-12-27
    Mybatis 一级缓存 Mybatis 二级缓存 MyBatis一级缓存和二级缓存
  • jsonp的工作原理
    JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。 这一策略对于JavaScript代码能够访问的页面内容做了...
    99+
    2023-09-01
    javascript ajax php
  • Hibernate缓存机制的原理
    本篇内容主要讲解“Hibernate缓存机制的原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate缓存机制的原理”吧!1. 为什么要用 Hibe...
    99+
    2022-10-18
  • HTTP缓存机制的原理
    这篇文章主要介绍“HTTP缓存机制的原理”,在日常操作中,相信很多人在HTTP缓存机制的原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTTP缓存机制的原理”的疑惑有所帮...
    99+
    2022-10-19
  • http缓存技术的原理
    本篇内容主要讲解“http缓存技术的原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“http缓存技术的原理”吧!HTTP缓存实现的原理浏览器是如何知道使用缓存的,其实这都是通过http中,浏览...
    99+
    2023-06-05
  • Python 内存管理的工作原理,你了解吗?
    Python 为开发者提供了许多便利,其中最大的便利之一是其几乎无忧的内存管理。开发者无需手动为 Python 中的对象和数据结构分配、跟踪和释放内存。运行时会为你完成所有这些工作,因此你可以专注于解决实际问题,而不是争论机器级细节。尽管如...
    99+
    2023-05-14
    Python 内存管理
  • MyBatis一级缓存与二级缓存原理与作用是什么
    这篇“MyBatis一级缓存与二级缓存原理与作用是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MyBatis一级缓存与...
    99+
    2023-07-04
  • 计算机内存的工作原理是什么
    计算机内存的工作原理是:内存寻址内存可以从CPU获得查找某个数据的指令,在找出存取资料的位置,其会先定出横坐标,在定出纵坐标。内存传输当储存资料或从内存内部读取资料时,CPU会通过地址总线将地址送到内存,后由数据总线将对应的数据传输到微处理...
    99+
    2022-10-17
  • ASP.Net页面生命周期与Page_Load方法的工作原理介绍
    一、ASP.Net Web应用程序中的请求处理过程 二、 http模块生命周期: 三、Asp.NET页面生命周期 1、阶段 阶段说明请求页面(Page Request)严格地说,...
    99+
    2022-11-13
  • DNS缓存中毒怎么工作的
    本篇内容介绍了“DNS缓存中毒怎么工作的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!DNS缓存中毒是一种网络攻击,它使您的计算机误以为它会...
    99+
    2023-06-28
  • HTTP缓存原理介绍
    这篇文章主要讲解了“HTTP缓存原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTTP缓存原理介绍”吧!通过Internet获取资源既缓慢,成本又高...
    99+
    2022-10-19
  • Mybatis工作原理
    作者:wuxinliulei链接:https://www.zhihu.com/question/25007334/answer/266187562来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Mybatis原...
    99+
    2023-06-05
  • mha-工作原理
    mha的工作原理1.检查阶段<1>.监测到maser goway<2>.多路由检测<3>.重复检测4次(这个次数固定的,无法修改)<4>.检测ssh是否正常&...
    99+
    2022-10-18
  • Xtrabackup工作原理
    目录1.Xtrabackup介绍2.Xtrabackup备份涉及的数据库名词2.1.MySQL数据文件扩展名知识说明2.2.事务型引擎的ACID特性2.3.InnoDB引擎内部知识概念2.4.InnoDB引擎内部知识及说明2.5....
    99+
    2020-09-08
    Xtrabackup工作原理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作