桦山涧

桦山涧
Asp.net ---->知识改变命运!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

内置对象Cache对象

Posted on 2007-07-30 16:13  桦林  阅读(608)  评论(0编辑  收藏  举报
Cache对象

对于每个应用程序域均创建该类的一个实例,并且只要对应的应用程序域保持活动,该实例便保持有效。有关此类实例的信息通过HttpContext对象的Cache属性或Page对象的Cache属性来提供。

1.Cache对象的属性

Cache对象的属性如表14-13所示:

表14-13   Cache对象的属性

    

    

Count

获取存储在缓存中的项数。当监视应用程序性能或使用ASP.NET跟踪功能时,此属性可能非常有用

存储在缓存中的项数

Item

获取或设置指定键处的缓存项

表示缓存项的键的String对象

2.Cache对象的方法

Cache对象的方法如表14-14所示:

表14-14   Cache对象的属性

    

    

Add

将指定项添加到 Cache 对象,该对象具有依赖项、过期和优先级策略,以及一个委托(可用于在从 Cache 移除插入项时通知应用程序)

Get

Cache 对象检索指定项

Remove

从应用程序的 Cache 对象移除指定项

Insert

Cache对象插入项。使用此方法的某一版本改写具有相同key参数的现有Cache

实例14-19:检索为ASP.NET文本框服务器控件缓存的值

Get方法可以从Cache对象检索指定项,其唯一的参数key表示要检索的缓存项的标识符。该方法返回检索到的缓存项,未找到该键时为空引用。

下面的示例展示如何检索为ASP.NET文本框服务器控件缓存的值。

Cache.Get("MyTextBox.Value");

实例14-20:移除Cache对象

Remove方法可以从应用程序的Cache对象移除指定项,其唯一的参数key表示要移除的缓存项的String标识符。该方法返回从Cache移除的项。如果未找到键参数中的值,则返回空引用。

下面的示例创建一个RemoveItemFromCache函数。调用此函数时,它使用Item属性检查缓存中是否包含与Key1键值相关的对象。如果包含,则调用Remove方法来移除该对象。

public void RemoveItemFromCache(Object sender, EventArgs e)

{

     if(Cache["Key1"] != null)

       Cache.Remove("Key1");

}

Global.asax

除了编写界面代码外,开发人员还可以将逻辑和事件处理代码添加到他们的Web应用程序中。此代码不处理界面的生成,并且一般不为响应个别页请求而被调用。相反,它负责处理更高级别的应用程序事件,如Application_Start,Application_End,Session_Start,Session_End等。开发人员使用位于特定Web应用程序虚拟目录树根处的Global.asax文件来创作此逻辑。第一次激活或请求应用程序命名空间内的任何资源或URL时,ASP.NET自动分析该文件并将其编译成动态.NET框架类(此类扩展了HttpApplication基类)。

第一次激活或请求应用程序命名空间内的任何资源URL时,ASP.NET分析Global.asax文件并将其动态编译成.NET框架类。Global.asax文件被配置为自动拒绝任何直接URL请求,从而使外部用户不能下载或查看内部代码。

通过在Global.asax文件中创作符合命名模式“Application_EventName(Appropriate EventArgumentSignature)”的方法,开发人员可以为HttpApplication基类的事件定义处理程序。例如:

<script language="C#" runat="server">

void Application_Start(object sender, EventArgs e) {

   // Application startup code goes here

}

</script>

如果事件处理代码需要导入附加的命名空间,可以在.aspx页中使用@ import指令,如下所示:

<%@ Import Namespace="System.Text" %>

第一次打开页时,引发应用程序和会话的Start事件:

void Application_Start(object sender, EventArgs e) {

   // Application startup code goes here

}

void Session_Start(object sender, EventArgs e) {

   Response.Write("Session is Starting...<br>");

   Session.Timeout = 1;

}

对每个请求都引起BeginRequest和EndRequest事件。刷新页时,只显示来自Begin-Request,EndRequest和Page_Load方法的消息。

静态对象、.NET框架类和COM组件都可以使用对象标记在Global.asax文件中定义。范围可以是appinstance,session或application。appinstance范围表示对象特定于Http-Application的一个实例并且不共享。

<object id="id" runat="server" class=".NET Framework class Name" scope=" appinstance"/>

<object id="id" runat="server" progid="COM ProgID" scope="session"/>

<object id="id" runat="server" classid="COM ClassID" scope="application"/>

请注意,Global.asax使用了微软的HTML拓展<SCRIPT>标记语法来限制脚本,这也就是说,必须用<SCRIPT>标记来引用这两个事件而不能用<%和%>符号引用。在Global.asax中不能有任何输出语句,无论HTM的语法还是Response.Write方法都是不行的,Global.asax是任何情况下也不能进行显示的。