搜索
首页后端开发C#.Net教程浅析asp.net页面缓存技术

很早就想写多点关于技术的东西
一来是为了自己可以更方面的查询,而来当然了更方面大家拉。哈
闲话少说
今天刚好有空就拼凑点出来


页面缓存
使用OutputCache指令。
<%@ OutputCache Duration="3600"
Location="Any"
VaryByCustom="browser"
VaryByParam="RequestID" %>
其中Duration和VaryByParam特性是必须的。

Location控制页面缓存的位置

Location
含义
Any
默认值。意味着页面的输出可以缓存在客户端浏览器,缓存在任何“下游”的客户端(如代理服务器),或缓存在Web服务器本身
Client
指明输出缓存只能存储在发出请求的客户端(即浏览器)的本地缓存中
Downstream
指明输出缓存能存储在任何支持HTTP1.1缓存的设备(如代理服务器)中
Server
指明输出缓存将存储在Web服务器上
None
指明该页面禁用输出缓存


Duration允许我们控制页面在缓存中生存的时间(单位是秒)

VaryByParam允许我们缓存页面的不同版本。在上面的例子中,VaryByParam设为了RequestID,所以ASP.NET使用RequestID参数的不同值,这些值或者是在HTTP GET的查询字符串中传入,或者是在HTTP POST的参数中传入。可以通过检查RequestID参数的值让应用程序区分不同的用户;通过在页面的OutputCache指令中放置VaryByParam="RequestID",可以让ASP.NET为每个用户缓存页面的不同版本。
如果不想根据参数的值缓存页面的不问版本,那么只要把VaryByParam设为none。
也可以要求ASP.NET为每个可能的参数组合缓存页面的一个版本。为此,可把VaryByParam设为*。

VaryByHeader和VaryByCustom特性与VaryByParam的相似之处在于,它们允许指定何时应创建页面新的缓存版本。
VaryByHeader允许我们根据由分号分隔的HTTP头的列表末缓存页面的不向版本。
VaryByCustom当设为browser时,允许我们根据浏览器的名称和主版本信息缓存不同版本。也可以把它设为一个自定义方法的名称,从而实现我们自己的逻辑,控制缓存的版本。

片断缓存
可以利用用户控件将页面分段,在ascx文件中写入缓存的语句,而不在aspx文件中写缓存语句,这样ASP.NET就可以只缓存ascx片断的输出了。一般像页眉或页脚基本上都是一样的,就不需要重新加载。但是如果其中有动态变化的数据就不能对其进行缓存,因为一旦被缓存后程序就不会再创建它的实例来更新数据显示,只有等到生存期过期才行,所以对于这种情况就不适于用页面片断缓存。
注意:
一、注意片段缓存不支持Location特性;缓存页面片段惟一合法的地方是web服务器。这是因为片段缓存在ASP.NET中是新的功能,所以浏览器和代理服务器不支持。
二、片段缓存有另外一个在页面缓存中没有的特性——VaryByControl。VaryByControl特性允许指定一个由分号分隔的字符串列表,代表用户控件内使用的控件的名称;ASP.NET将针对值的每个不同的组合生成用户构件的一个缓存版本。

数据缓存
低级API是Cache类,它位于ASP.NET中的System.web.Caching命名空间,可以用它缓存生成很耗费资源的数据。Cache类的使用和Session与Application对象一样简单。每个应用程序只有一个Cache对象——这意味着使用Cache对象存储在缓存中的数据是应用程序级别的数据。使事情更为简单的是,Page类的Cache属性使应用程序的Cache对象实例能在代码中使用。
通过Cache对象缓存的数据存储在应用程序的内存中。这意味着该数据的生存期不会超过应用程序的重启(事实上,这和存储在Application与Session对象中的数据一样,除非使用StateService或SQL State会话模式存储Session数据)。
具体的使用和语法与Session和Application一样。转换回来的时候需要注意对其进行相应类型的强制类型转换

这不是在ASP.NET缓存中添加缓存项的惟一方式。Cache对象有两个方法Insert()方法和Add()方法,它们灵活性更高。它们的用法近似,但稍有不同:
Insert()方法用于覆盖ASP.NET缓存中现有的缓存项。
Add()方法只用于在ASP.NET缓存中添加新的缓存项(如果用它覆盖现有的缓存项,则会失败)。
每个方法都有7个参数,而且两个方法的参数相同。
在缓存某一项时,可以指定它的相关性,告诉ASP.NET该缓存项在缓存中一直保留到某个事件发生时为止。

相关性值
含义
CacheDependency
允许指定一个文件或缓存键。如果文件发生变化,对象就被删除。如果缓存键发生变化,对象也被删除。
DateTime
这是一个DataTime值,指明缓存数据过期的时间(绝对过期时间)
TimeSpan
这是一个时间间隔,指明缓存数据在上一次访问后可以在缓存中保留多长时间(弹性过期时间)

使用CacheItemPriority来指定缓存数据的优先级,以便在缓存被填满的时候删除那些优先级低的数据。

优先级值
含义
High
设为此优先级的缓存项是最不可能在内存不足时被删除的
AboveNormal
设为此优先级的缓存项比优先级为Normal或以下的缓存项更优先保留
Normal
设为此优先级的缓存项比优先级为BelowNormal和Low的缓存项更优先保留
BelowNormal
这是倒数第二级的优先级;设为此优先级的缓存项只比优先级设为Low的缓存项更优先保留
Low
设为此优先级的缓存项是最有可能在内存不足时被删除的
Default
缓存项的优先级的默认值是Normal
NotRemovable
当缓存项设为此优先级时,是在告诉ASP.NET即使是内存不足,也不要从缓存中删除它

DateTime dt = new DateTime(DateTime.Now.Year,12,31);
Cache.Add("MembersDataSet",dsMembers,null,
dt,TimeSpan.Zero,
CacheItemPriority.Normal,null);
第一个参数是引用缓存对象的键,第二个参数是要缓存的对象。第三个参数是null(表明没有相关性)。
第四和第五个参数是绝对的过期时间和弹性的过期时间。这里,我们指定缓存应在当前年份的最后一天过期(dt)。我们想指定没有弹性的过期时间,所以第五个参数使用TimeSpan.Zero。第六个参数使用System.Web.Caching.CacheItemPriority枚举中的一个值,把优先级设为Normal。

指定一个5分钟的弹性过期时间,没有指定绝对过期时间
Cache.Add("MembersDataSet",dsMembers,null,
DateTime.MaxValue,TimeSpan.FromMinutes(5),
CacheItemPriority.Normal,null);

添加一个相关性。在这个例子中,过期时间也取决于一个文件的修改,即test.xml文件:
CacheDependency dep = new CacheDependency(@"C:/test.xml");
Cache.Add("MembersDataSet",dsMembers,dep,
DateTime.MaxValue,TimeSpan.FromMinutes(5),
CacheItemPriority.Normal,null);

过期时间取决于缓存中另一项的修改:
String[] dependencyKeys = new String[1];
dependencyKeys[0] = "MembersChanged";
CacheDependency dependency = new CacheDependency(null, dependencyKeys);
Cache.Add("MembersDataSet",dsMembers,dependency,
DateTime.MaxValue,TimeSpan.Zero,
CacheItemPriority.Normal,null);

最后一个参数是CacheItemRemovedCallback类型的,允许我们在缓存项从缓存中删除时要求通知,可以编写一个自定义的方法(像这里的ItemRemovedCallback()方法),然后在第7个参数中指定该方法:
public void ItemRemovedCallback(String key, Object value, CacheItemRemovedReason reason)
{
}

Cache.Add("MembersDataSet",dsMembers,dependency,
DateTime.MaxValue,TimeSpan.FromMinutes(5),
CacheItemPriority.Normal,
new CacheItemRemovedCallback(this.ItemRemovedCallback));
第一个参数是在缓存中存储缓存项时使用的键,第二个是存储的对象本身,第三个是缓存项删除的原因。


以上是浅析asp.net页面缓存技术 的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何修复 Outlook 中缺少的 Microsoft Teams 插件如何修复 Outlook 中缺少的 Microsoft Teams 插件May 11, 2023 am 11:01 AM

团队在Outlook中有一个非常有用的加载项,当您在使用Outlook2013或更高版本的应用程序时安装以前的应用程序时,它会自动安装。安装这两个应用程序后,只需打开Outlook,您就可以找到预装的加载项。但是,一些用户报告了在Outlook中找不到Team插件的异常情况。修复1–重新注册DLL文件有时需要重新注册特定的Teams加载项dll文件。第1步-找到MICROSOFT.TEAMS.ADDINLOADER.DLL文件1.首先,您必须确保

如何在 Windows 10 中清除地址解析协议 (ARP) 缓存如何在 Windows 10 中清除地址解析协议 (ARP) 缓存Apr 13, 2023 pm 07:43 PM

地址解析协议 (ARP) 用于将 MAC 地址映射到 IP 地址。网络上的所有主机都有自己的 IP 地址,但网络接口卡 (NIC) 将有 MAC 地址而不是 IP 地址。ARP 是用于将 IP 地址与 MAC 地址相关联的协议。所有这些条目都被收集并放置在 ARP 缓存中。映射的地址存储在缓存中,它们通常不会造成任何损害。但是,如果条目不正确或 ARP 缓存损坏,则会出现连接问题、加载问题或错误。因此,您需要清除 ARP 缓存并修复错误。在本文中,我们将研究如何清除 ARP 缓存的不同方法。方法

如何在Mac上清除图标缓存?如何在Mac上清除图标缓存?Apr 22, 2023 pm 07:49 PM

如何在Mac上清除和重置图标缓存警告:因为您将使用终端和rm命令,所以在继续执行任何操作之前,最好使用TimeMachine或您选择的备份方法备份您的Mac。输入错误的命令可能会导致永久性数据丢失,因此请务必使用准确的语法。如果您对命令行不满意,最好完全避免这种情况。启动终端并输入以下命令并按回车键:sudorm-rfv/Library/Caches/com.apple.iconservices.store接下来,输入以下命令并按回车键:sudofind/private/var

0x80070246 Windows更新错误:6修复方法0x80070246 Windows更新错误:6修复方法May 20, 2023 pm 06:28 PM

根据几位Windows10和Windows11用户的说法,他们在尝试安装Windows更新时遇到了错误0x80070246。此错误阻止他们升级PC并享受最新功能。值得庆幸的是,在本指南中,我们列出了一些最佳解决方案,可帮助您解决Windows0PC上80070246x11的Windows更新安装错误。我们还将首先讨论可能引发问题的原因。让我们直接进入它。为什么我会收到Windows更新安装错误0x80070246?您可能有多种原因导致您在PC上收到Windows11安装错误0x80070246。

如何修复 Microsoft Teams 错误代码 caa70004 问题如何修复 Microsoft Teams 错误代码 caa70004 问题Apr 14, 2023 am 09:25 AM

尝试在其设备上启动 Microsoft Teams 桌面客户端的用户在空白应用页面中报告了错误代码 caa70004。错误代码说:“我们很抱歉——我们遇到了问题。”以及重新启动 Microsoft Teams 以解决问题的选项。您可以尝试实施许多解决方案并再次加入会议。解决方法——1. 您应该尝试的第一件事是重新启动 Teams 应用程序。只需在错误页面上点击“重新启动”即可。

如何在 Windows 11上显示所有缓存的 DNS 条目如何在 Windows 11上显示所有缓存的 DNS 条目May 21, 2023 pm 01:01 PM

Windows操作系统使用缓存来存储DNS条目。DNS(域名系统)是用于通信的互联网核心技术。特别是用于查找域名的IP地址。当用户在浏览器中键入域名时,加载站点时执行的首要任务之一是查找其IP地址。该过程需要访问DNS服务器。通常,互联网服务提供商的DNS服务器会自动使用,但管理员可能会切换到其他DNS服务器,因为这些服务器可能更快或提供更好的隐私。如果DNS用于阻止对某些站点的访问,则切换DNS提供商也可能有助于绕过Internet审查。Windows使用DNS解

如何在 Windows 11 上清理缓存:详细的带图片教程如何在 Windows 11 上清理缓存:详细的带图片教程Apr 24, 2023 pm 09:37 PM

什么是缓存?缓存(发音为ka·shay)是一种专门的高速硬件或软件组件,用于存储经常请求的数据和指令,这些数据和指令又可用于更快地加载网站、应用程序、服务和系统的其他部分。缓存使最常访问的数据随时可用。缓存文件与缓存内存不同。缓存文件是指经常需要的文件,如PNG、图标、徽标、着色器等,多个程序可能需要这些文件。这些文件存储在您的物理驱动器空间中,通常是隐藏的。另一方面,高速缓存内存是一种比主内存和/或RAM更快的内存类型。它极大地减少了数据访问时间,因为与RAM相比,它更靠近CPU并且速度

vue的缓存有几种实现方式vue的缓存有几种实现方式Dec 22, 2021 pm 06:00 PM

vue缓存数据有4种方式:1、利用localStorage,语法“localStorage.setItem(key,value)”;2、利用sessionStorage,语法“sessionStorage.setItem(key,value)”;3、安装并引用storage.js插件,利用该插件进行缓存;4、利用vuex,它是一个专为Vue.js应用程序开发的状态管理模式。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用