ASP.NET缓存管理的几种方法(4)

有时,我们的web应用程序在一定的时间范围内对于某些页面来说是不会变化的,例如HR站点中,员工工资信息不会频繁地变动,它们在一个月一般只变动一次。一般来说都是在一个月的第一天发生变化。所以,对特定的员工来说,一个月中这个员工的页面内容是不会变化的。所以,把这些页面在服务器上缓存起来以避免每次请求重新计算的过程,这真是个不错的主意。为了达到这个目的,.NET为我们提供了在服务端指定特定时间缓存输出页面的特性;它也提供了缓存页面片段的特性。在这儿我不再详细去描述这种缓存方法了,因为网络上有很多关于这方面的详细介绍。这是一个非常长的部分如果我们现在讨论它,我计划在其它章节去讨论它。

复制代码 代码如下:


<!-- VaryByParm - different versions of same page will be
cached based on the parameter sent through HTTP Get/Post
Location - where the page is cached -->
<%@OutputCache Duration="60" VaryByParam="empNum"
                                       Location="Server"%>

我们来对比一下我们所讨论的这些缓存:

方法    是否支持网站群?   备注  

ASP.NET Session State
- InProc
- StateSerer
- SQLServer

 


No
Yes
Yes

  Unlike other option, it stores only user session specific data  
ASP.NET Application Object   No      
ASP.NET Cache Object   No      
.NET Remoting   Yes      
Memory-Mapped files   No      
Static Variables   No      
Database   Yes      
ASP.NET Page Output Caching   No      

客户端缓存管理

在上面章节中我们讨论了在服务端的不通缓存方式,但有时我们希望能在客户端缓存数据和页面以提高性能。使用客户端缓存可以降低服务端的负载压力,但这种缓存机制却存在安全问题因为数据是存储在客户端。在客户端缓存也有不同的方式,我将简单地谈到几种。

Cookies

Cookie对web开发人员中是非常熟悉的概念,Cookie存储在客户端,当客户端每次发送请求时都会将它发送到服务端,服务端响应时也会把它发回到客户端。因为它限制了字节数(4096个字节),所以它只能缓存比较小的数据。它可以使用过期策略使它在一段特定的时间之后失效。下面的例子显示了在ASP.NET中如何使用Cookie。

复制代码 代码如下:


if (this.Request.Cookies["MY_NAME"] == null)
{
    this.Response.Cookies.Add(new HttpCookie("MY_NAME",
                                       "Shubhabrata Mohanty"));
}
else
{
    this.Response.Write(this.Request.Cookies["MY_NAME"].Value);
}


ViewState

.NET ViewState是一个新的概念。和页面相关的数据和控件都是存储在ViewState,这些保留值可以跨多个请求道服务器。如果你还记得,在VB-ASP应用开发中跨多个请求存储数据是通过Hidden控件的。事实上ViewState在ASP.NET是隐藏控件的内部实现,但对比隐藏控件它做了散列化以增加安全性。去看ViewState是如何实现的,你可以打开页面查看源代码。ViewState也不能存储大量数据因为它每个请求都会发送到服务端。

复制代码 代码如下:


protected void Page_Load(object sender, EventArgs e)
{
    if (this.ViewState["MY_NAME"] == null)
    {
        this.ViewState["MY_NAME"] = "Shubhabrata Mohanty";
    }

    //txtName is a TextBox control
    this.txtName.Text = this.ViewState["MY_NAME"].ToString();
}


Hidden fields

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjdxyx.html