ASP.Net性能优化——页面输出缓存

ASP.NET页面正在加载过程中,显示“正在加载…… asp.net页面显示正在加载、提交表单显示进度条 立即下载
在计算机科学领域,广泛应用缓冲技术来提高系统的性能,它的原理是把经常存取的或者是比较重要的数据保存于内存中以减少系统的响应时间。对于WEB应用领域,缓冲技术主要是把HTTP请求的页面或数据保存于内存,以减少下次使用时重建它们的耗费。
     ASP.NET有两种用于WEB应用的缓冲技术:输出缓冲和数据缓冲。
     输出缓冲指:把一次请求所产生的动态输出保存于内存中。
     数据缓冲指:按照一定的策略把事先不确定的对象保存于内存中。
输出缓冲常用于把整个输出页面缓冲起来。对于一个存取繁忙的站点来说,把一些常用页面放入内存会带来性能上的极大提高。当一个页面被放入输出缓存,那么接下来的对该页面的请求将不再执行创建它的代码,而是从内存中直接返回该页面。
        但实际上,保存整个输出页面的方法并不一定都行得通,因为有些页面的输出取决于客户端的不同请求,称之为“定制”。这时,采取的方法即找出不同中的相同,把一些并不需要经常重新创建的对象和数据识别出来,进行缓冲。一旦这些部分被识别,那么它们将被一次创建并在缓存中保持一定的时间。
 选择缓存的时间是提高性能的关键。对一些部分来说,它们需要隔一定时间进行刷新,而另一些部分来说,可能仅仅只是需要保存一段时间。此种情况下,都可以设定“过期策略”来实现。一旦这些对象和数据到期,它们都将被从缓存中清除出去。当存取对象和数据的代码发现所要求的部分在内存中不存在时,将重建该对象或数据。
         ASP.NET支持文件和缓存关键字的依赖关系,它允许开发人员创建缓存依赖于一个外部文件或另一个缓存事物。利用这项技术可以更新一个缓存事物当其依赖的源文件发生改变时。

1 基本概念
        页面输出缓存通过保存动态页面的输出内容,大大提高了服务器应用的能力。缺省情况下,输出缓存选项是被打开的,但并不是任意给定的输出响应都将被缓存,除非显示地指定页面应被缓存。
         为使输出能够被缓存,输出响应至少应有一个有效的过期/有效策略以及公用cache的访问权限。当一个GET请求被送往页面,一个输出缓冲入口将被创建。接下来,对该页面的GET请求和HEAD的请求将直接从该缓冲入口中取出返回给用户,而对该页面的POST请求通常是显示地产生动态内容,却并非如同GET和HEAD请求一样从缓冲入口中取出。
         输出缓存还支持带请求串的GET方法,把请求串作为页面识别的一部分。这就意味着带有相同键值但排列次序不同的请求串的GET请求,可能导致缓存中认为不存在该输出页面。
         输出缓存需要知道页面缓存的过期/有效时间策略。如果一个页面在输出缓存中,而且又被指定为60分钟的页面过期时间,那么从它进入输出缓存开始,60分钟后该页面将从输出缓存中被清除。如果恰在此时,有一个对该页面的请求到达,页面的代码将被执行,页面输出又将重新进入输出缓冲。这种方式的过期策略称之为“强制过期”,页面只在一定时间内有效。
        如下,我们可以用下面一条语句来显示的指出页面在输出缓冲中的保存时间。
    <%@ OutputCache Duration=秒数 %>

2 实例
        下面举一个简单的例子来证实ASP.NET中的页面缓存功能
        在一个页加载时,我们显示它的时间,在页面过期时间(设为:10秒)到达之前,我们把页面刷新(相当于重发GET请求),看一看显示的时间;然后,在过期时间到达之后,再看显示的时间。如果,第一次和第二次显示的时间相同,那么就证明了,系统存在有页面输出缓存功能,做为对比,当过期时间到达后,新的请求将导致重新执行页面代码,产生新的时间显示。
程序源程序
<!--文件名: performance/FormPageCache.aspx-->
<%@ OutputCache Duration="10" %>
<!--过期时间设为10秒-->
<html>
<head>
<title>
页面输出缓存测试
</title>
</head>
<body >
    
<center>  
    
<h2><font face="Verdana">测试页面输出缓存实验</font></h2>
    
<p><p><p>
    
<hr>
    
</center>    
   
<asp:label id="lblTime" runat="server"/>
  
</body>
</html>
<!--文件名: FormPageCache.aspx.cs-->
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
/// <summary>
/// FormPageCache 的摘要说明。
/// </summary>

public class FormPageCache : System.Web.UI.Page
{
    
private void Page_Load(object sender, System.EventArgs e)
    
{
         lblTime.Text 
="现在时间是:" +  DateTime.Now.ToString();
    }


    
#region Web 窗体设计器生成的代码
    
override protected void OnInit(EventArgs e)
    
{
        
//
        
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
        
//
        InitializeComponent();
        
base.OnInit(e);
    }

    
    
/// <summary>
    
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
    
/// 此方法的内容。
    
/// </summary>

    private void InitializeComponent()
    
{    
        
this.Load += new System.EventHandler(this.Page_Load);

    }

    
#endregion

}

第一次输出效果:
 
第二次输出效果:


第三次输出效果:


 实现页面缓存的另一种方法:
//指定页面输出缓存下一个10秒到期
    Response.Cache.SetExpires(DateTime.Now.AddSeconds(10));

    
//指定所有用户都有对缓存的访问权力
    Response.Cache.SetCacheability(HttpCacheability.Public);

    
//如果不希望进行页面缓存,可采用Response.Cache.SetSlidingExpiration方法,当其为True时,每次页面请求到达时,相当于页面过期时间到了,就要对页面输出重新刷新 。
    
    
//当每次页面请求时,重置到期时间计数器,并且页面到期
    Response.Cache.SetSlidingExpiration(true);

例如上面的例子可以改写成如下例子:
<!--文件名:FormPageCache01.aspx-->
<html>
<head>
<title>
页面输出缓存测试1
</title>
</head>
<body >
    
<center>  
    
<h2><font face="Verdana">测试页面输出缓存实验1</font></h2>
    
<p><p><p>
    
<hr>
    
</center>    
   
<asp:label id="lblTime" runat="server"/>
   
</body>
</html>

<!--文件名:FormPageCache01.aspx.cs-->
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

/// <summary>
/// FormPageCache 的摘要说明。
/// </summary>

public class FormPageCache : System.Web.UI.Page
{
    
private void Page_Load(object sender, System.EventArgs e)
    
{
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(
10));
        Response.Cache.SetCacheability(DateTime.Now.AddSeconds(
10));
        lblTime.Text 
="现在时间是:" +  DateTime.Now.ToString();
    }


    
#region Web 窗体设计器生成的代码
    
override protected void OnInit(EventArgs e)
    
{
        
//
        
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
        
//
        InitializeComponent();
        
base.OnInit(e);
    }

    
    
/// <summary>
    
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
    
/// 此方法的内容。
    
/// </summary>

    private void InitializeComponent()
    
{    
        
this.Load += new System.EventHandler(this.Page_Load);

    }

    
#endregion

}



输出的结果和上一例子大体相同,就不在重复了。
 
页面加载中loading(js、asp.net) 立即下载

相关推荐

导出库的版本_Windows下PaddleOCR在C++中的推理部署(CPU版本)CMake + VS2017

PaddleOCR是一个与OCR相关的开源项目,不仅支持超轻量级中文OCR预测模型,总模型仅8.6M(单模型支持中英文数字组合识别、竖排文本识别、长文本识别,其中检测模型DB(4.1M)+识别模型CRNN(4.5M)),而且提供多种文本检测训练算法(EAST、DB)和多种文本识别训练算法(Rosetta、CRNN、STAR-Net、RARE)。本文将教大家通过PaddleOCR(CPU版...

weixin_31304817的博客 1914

ASP代码的一些优化技巧

脚本• 在ASP程序行首使用Option Explicit不声明VBScript的变量会加重了服务器的解析负担,进而影响服务器的响应请求速度。为加快速度和方便调试,建议强制进行变量声明。• 多支选择尽量使用Select Case,避免使用If……ElseIf……ElseIF……End If。使用case语句,可以使程序流程化,执行起来也比if语句来的快。• 如果不是别无选择,否则不要使用strPa

Liner 763

239号资源-simulink仿真:MATLAB/Simulink教程(PDF文档)-----已提供下载资源

电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。

LIANG674027206的博客 1076

优化asp程序

   如果你是一位ASP爱好者,你一定想过ASP的执行效率如何?大家都知道ASP效率和CGI的比,在访问量少的时候,它们是不相上下的,有时可能CGI还会好点(我觉得这主要和NT系统运行效率有关),但在访问量大的时候,ASP要比CGI好得多!但是,你有没有想过你所写的ASP程序还能再优化?     下面我就介绍一些有关优化你的ASP程序的方法。     一、少用会话变量     使用会话变量会降低网

xiaogu1234的专栏 557

matianl:SAP 最详细的权限管理解析

上文所说的系统自带权限对象与权限字段仅能满足有限的需要,其权限审核的逻辑也是系统硬编码了的,我们能做的只是是否启用某项权限对象的检查(使用SU22)。如果需要自定义,通过SU20、SU21定义即可。

matinal 當冬夜漸暖 。公众号:matinal 2155

HEC-HMS水文建模从入门到精通:手把手教你安装与配置(附常见问题解决)

本文详细指导HEC-HMS水文建模软件的安装与配置,重点解析了基于InstallShield Wizard的安装流程,并提供了针对常见错误代码(如-6003)的解决方案。旨在帮助水文、水利领域从业者快速搭建稳定的建模环境,为后续流域模拟与洪水预报奠定基础。

weixin_29213827的博客 496

asp优化:提高ASP性能的最佳选择

ASP开发人员为了在他们的设计项目中获得更好的性能和可扩展性而不断努力。幸运地是,有许多书籍和站点在这方面提供了很好的建议。但是这些建议的基础都是从ASP平台工作的结构上所得出的结论,对实际获得的性能的提高没有量的测量。由于这些建议需要更加复杂的编码过程并降低了编码的可读性,开发人员就只能在看不到实际运行效果的情况下,独自衡量为了提高他们ASP应用程序的性能是否值得付出这些代价。   本文分为两大

684

ADS使用Smith圆图进行阻抗匹配

在处理RF系统的实际应用问题时,总会遇到一些非常困难的工作,对各部分级联电路的不同阻抗进行匹配就是其中之一。一般情况下,需要进行匹配的电路包括天线与低噪声放大器(LNA)之间的匹配、功率放大器输出(RFOUT)与天线之间的匹配、LNA/VCO输出与混频器输入之间的匹配。匹配的目的是为了保证信号或能量有效地从“信号源”传送到“负载”。 阻抗匹配(impedance matching) 信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输

红茶绿茶和奶茶的博客 3万+

使用NPOI完全脱离excel的导出二,批量数据导出性能优化。

使用完全脱离excel的导出中的方法导出excel,使用了一段时间后,发现问题不少,尤其是数据量特别大的时候,例如上万的数据,经常需要好几分钟。于是自己就开始进行优化。   经过观察代码,发现能优化的地方。1使用反射的地方 2类型判断的地方3是设置单元的值   1使用反射的地方   PropertyInfo pinfo = typeof(TModel).GetProperty(co...

xuexiaodong2009的专栏 7661

人大金仓的‘影子表’sys_user:搞懂Schema优先级,告别字段不存在的报错

本文深入解析人大金仓数据库中‘影子表’sys_user的Schema优先级问题,帮助开发者解决字段不存在的报错。通过分析Schema搜索路径机制,提供四种解决方案,包括连接时指定Schema、动态调整搜索路径、永久修改用户设置和使用完全限定表名,确保查询准确无误。

weixin_30329623的博客 596

【WorkBuddy从入门到精通实战教程】实战案例 第 18 章 把投资分析(炒股)变成你的日常

投资本身就是一件高度信息密集、强结构化、又极度依赖判断的事:读不完的财报、理不清的行业、吵不停的多空。而整理碎片信息、拆解复杂材料、把思考过程摆到台面上,恰好是 AI 擅长的。 在一次完整的股票研究里,AI 到底能替你做掉哪些低质量的重复劳动,把精力还给判断本身。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 470

页面输出缓存之ASP.Net性能优化篇

在计算机科学领域,广泛应用缓冲技术来提高系统的性能,它的原理是把经常存取的或者是比较重要的数据保存于内存中以减少系统的响应时间。对于WEB应用领域,缓冲技术主要是把HTTP请求的页面或数据保存于内存,以减少下次使用时重建它们的耗费。 ASP.NET有两种用于WEB应用的缓冲技术:输出缓冲和数据缓冲。 输出缓冲指:把一次请求所产生的动态输出保存于内存中。 数据缓冲指:按照一定...

weixin_34186950的博客 83

光谱数据预处理综合

除了化学信息,光谱还包含其他不相关或不需要的信息,如电噪声,基质背景,杂散光,散射效应等。在用化学计量学方法建立校准模型时,利用预处理方法消除光谱数据中的无关信息和噪声是非常必要的。

qq_44204759的博客 5190

asp.net的优化

ASP.NET: 一、返回多个数据集   检查你的访问数据库的代码,看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量。   如果用动态的SQL语句来返回多个数据集,那用存储过程来替代动态的SQL语句会更好些。是否把业务逻辑写到存储过程

書畵 455

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【转】asp.net性能的技巧

1. 数据库访问性能优化   数据库的连接和关闭   访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。   连接池的大小是有限...

weixin_30414155的博客 149

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

asp.net性能的技巧

申明:这篇文章转载自 http://www.cnblogs.com/netguid/archive/2007/01/29/633306.html  1. 数据库访问性能优化   数据库的连接和关闭  访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。 ASP.NET中提供了连接池(Connection P

周尚冬的专栏 795

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ASP.NET设计中的性能优化问题 (转)

关于数据处理相关的优化 一、 SqlDataRead和Dataset的选择 Sqldataread优点:读取数据非常快。如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性能要比datset好很多。缺点:直到数据读完才可close掉于数据库的连接 (SqlDataReader 读数据是快速向前的。SqlDataReader 类提供...

dhz43885的博客 206

ASP.NET性能优化小结(ASP.NET&C#)

本文转载自:http://www.codesky.net/article/201202/164901.html ASP.NET: 一、返回多个数据集   检查你的访问数据库的代码,看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量。

426

ASP.NET优化性能的方法

  1. 数据库访问性能优化   数据库的连接和关闭   访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。   连接池的大小是有限的,如

The key to .Net 346

提高ASP.Net应用程序性能的十大方法(二)

六、 后台处理   通过上面的方法你的应用程序应该运行得很快了,是不是?但是在某些时候,程序中的一次请求中可能要执行一个非常耗时的任务。如发送邮件或者是检查提交的数据的正确性等。   当我们把asp.net Forums 1.0集成在CS中的时侯,发现提交一个新的帖子的时候会非常的慢。每次新增一个帖子的时侯,应用程序首先要检查这个帖子是不是重复提的,然后用“badword”过滤器来过滤,检查图片附

huximing的专栏 474

性能优化

gym 博客园    首页    新随笔    联系    订阅    管理 随笔 - 26  文章 - 0 评论 - 19 trackbacks - 0 ASP.NET性能优化 一、返回多个数据集    检查你的访问数据库的代码,看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返

yuanyuanispeak的专栏 911

多条asp.net网站的优化建议

一、返回多个数据集   检查你的访问数据库的代码,看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量。   如果用动态的SQL语句来返回多个数据集,那用存储过程来替代动态的SQL语句会更好些。是否把业务逻辑写到存储过程中,这个有点争议。但是我...

weixin_34303897的博客 90
上一篇: Asp.Net细节性问题精萃
下一篇: ASP.Net性能优化——页面数据缓存
alys
博客等级 码龄23年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值