ASP.net的性能小技巧(缓存篇)

本文探讨了ASP.NET中的IsPostBack与ViewState机制,详细解释了ViewState如何存储和减轻网络负担的方法。此外,还介绍了ASP.NET中的输出缓存和其他缓存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. IsPostBack和ViewState

1.1 概念介绍

IsPostBack,是否回传
ViewState,ASP.NET 使用这种机制来跟踪服务器控件状态值,否则这些值将不作为 HTTP 窗体的一部分而回传。例如,由 Label 控件显示的文本默认情况下就保存在 ViewState 中。作为开发人员,您可以绑定数据,或在首次加载该页面时仅对 Label 编程设置一次,在后续的回传中,该标签文本将自动从 ViewState 中重新填充。因此,ViewState 通常还可以减少数据库的往返次数。

1.2 使用场景

a. 没有回传,则不必理会。
b. 绑定的后台数据在回传的过程中不会改变。
根据IsPostBack判断是否回传,从而避免重复改变
c. 每次回传都需要从后台重新取得数据。
关闭ViewState以减轻网络负荷。
d. ViewState数据很大。
默认情况下ViewState 储存在客户端,并随着页面的 PostBack 反复传递于网络中。我们需要把ViewState改存到数据库或Cache中,范例如下:

protected override void SavePageStateToPersistenceMedium(object viewState)
{
    LosFormatter format 
= new LosFormatter();//有限对象序列化 (LOS) 格式化程序用于高度压缩 ASCII 格式的序列化
    StringWriter writer = new StringWriter();
    format.Serialize(writer, viewState);
    
byte[] buffer = Convert.FromBase64String(writer.ToString(););
    
string vsText = Encoding.ASCII.Getring(buffer);
    
object v = Cache[PageKey];        
    
if (v == null)                    
        Cache.Insert(PageKey, vsText);    
    
else                              
        Cache[PageKey] 
= vsText;          
}
         
protected erride object LoadPageStateFromPersistenceMedium()
{         
    
object = Cache[PageKey];
    
if (s != null)    
    
{    
        
string state = s.ToString();    
        
byte[] buffer = Encoding.ASCII.GetBytes(state);    
        
string vsRaw = Convert.ToBase64String(buffer);    
        LosFormatter formatter 
= new LosFormatter();    
        
return formatter.Deserialize(vsRaw);    
    }
    
    
return null;
}

2. 输出缓存

<%@ OutputCache Duration="1000" VaryByParam="DepartmentIndex;CategoryIndex" %>
页面缓存超时时间为1000秒,ASP.NET根据QueryString中的不同DepartmentIndex和CategoryIndex进行缓存不同的版本。VaryByParam可使用正则表达式,如"*"。

3. 其它缓存

Application, 整个站点应用程序域里存活。
Cache,整个站点应用程序集存活,但是可以设置依赖文件,其它缓存键,绝对超时时间,和相对超时时间等来使Cache失效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值