当前位置:K88软件开发文章中心编程语言.NETASP.NET → 文章内容

ASP.NET 数据缓存

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 13:58:14

由 creepercat 创建,Carrie 最后一次修改 2016-08-12 数据缓存什么是缓存?缓存是一种将经常使用的数据/信息存储在内存中的技术,这样,下次需要相同的数据/信息时,可以直接从内存检索,而不是再从应用程序中生成。 缓存在用于提高 ASP 性能方面是非常重要的,因为 ASP 的页面和控件是都动态生成的。这对于交互相关的数据是极其重要的,因为响应时间是很宝贵的。 在需要快速访问的媒体,如计算机的随机存取存储器,缓存放置了被频繁使用的数据。ASP 的运行时间包含一个叫做缓存的 CLR 对象的键值对。它位于应用程序内,并且通过 HttpContext 和 System.Web.UI.Page 可用。 在某些方面,缓存和存储状态对象有相似之处。然而,状态对象的存储信息是确定的,比如,你可以计算存储在状态对象的数据,但是缓存的数据是不确定的。 在下列情况里,数据是不可用的: 如果它的生命周期已结束,如果该应用释放了它的内存,如果由于某些原因缓存没有被替换。您可以使用一个索引器在缓存中访问项目,并且有可能控制缓存中对象的生命周期和设置缓存的对象及其物理资源之间的联系。 ASP.NET 中的缓存ASP提供如下几种不同类型的缓存: 输出缓存:输出缓存可以存储最后显现的网页的副本,或者是发送到客户机的部分页面。下次客户机请求该页面时,这个页面的缓存副本就会被发送给客户机,而不是重新生成这个页面,这样一来就节省了时间。 数据缓存:数据缓存是指从数据源缓存数据。只要缓存没被替换,那么再请求该数据时就会从缓存中获取。当缓存被替换的时候,会从数据源中获取新数据,缓存也会被再次充满。 对象缓存:对象缓存是缓存页面的对象,比如数据绑定控件等。缓存的数据放在服务器的内存。 类缓存:网页或 Web 服务是第一次运行时在组装编译成页类。然后组装会在服务器缓存。当下次请求该页面或者服务,就会使用缓存的装配。当改变源代码时,CLR 重新编译程序集。 配置缓存:应用程序配置信息存储在一个配置文件。配置缓存存储在服务器内存配置信息。 在本教程中,我们将考虑输出缓存,数据缓存和对象缓存。 输出缓存呈现一个页面可能涉及一些复杂的过程,如,数据库访问,呈现复杂的控件等。输出缓存允许通过在内存中缓存数据,而绕过往返服务器。甚至可以缓存整个页面。 OutputCache 指令负责输出缓存。它启用输出缓存,并对其行为提供一定程度的控制。 OutputCache 指令的语法: <%@ OutputCache Duration="15" VaryByParam="None" %>把这个指令放在页面指令下。这告诉环境需要缓存页面,持续 15 秒。以下页面加载事件处理程序将帮助确认页面是否已被缓存完毕。 protected void Page_Load(object sender, EventArgs e){ Thread.Sleep(10000); Response.Write("This page was generated and cache at:" + DateTime.Now.ToString());}Thread.Sleep()方法使特定时间内的进程停止。在这个例子中,线程停止了 10 秒钟,因此,当页面第一次下载时,需要花费 10 秒钟的时间。然而,下次刷新页面的时候,就不会花费时间了,因为这个页面已经从缓存中获取了,不要再下载。 当帮助控制输出缓存的行为 OutputCache 指令有以下特性: 属性值描述DiskCacheabletrue/false描述输出是否可以写入带有缓存的磁盘。NoStoretrue/false描述 "no store" 缓存头部是否被发送。CacheProfile字符串名存储在 web.config 中的缓存配置文件名字。VaryByParamNone*参数名GET 请求中使用分号分隔的字符串值或者是 POST 请求中的变量值。VaryByHeader*头文件名可能是由客户端提交的用分号分隔的指定头的字符串。VaryByCustom浏览器自定义字符串通知 ASP.NET 通过浏览器名字版本或者客户端字符串改变输出缓存。Location任何客户端下载流服务器None任何:页面可能缓存在任何位置客户端:缓存内容包含在浏览器中下载流:缓存内容保存在下载流和服务器中服务器:缓存仅保存在服务器之中None:不允许缓存。Duration数字被缓存页面或者操作的秒数。让我们为前面的示例添加一个文本框和一个按钮,并添加这个按钮的事件处理程序。 protected void btnmagic_Click(object sender, EventArgs e){ Response.Write("<br><br>"); Response.Write("<h2> Hello, " + this.txtname.Text + "</h2>");}改变 OutputCache 指令: <%@ OutputCache Duration="60" VaryByParam="txtname" %>程序执行的时候,ASP 在文本框中依据名字缓存页面。 数据缓存数据缓存的主要方面是数据源控件缓存。我们已经讨论了数据源控件代表一个数据源中的数据,如数据库或 XML 文件。这些控件从抽象类 DataSourceControl 中派生,并有以下继承属性以实现缓存: 缓存期 — 为缓存数据的数据源计时。缓存期满策略 — 定义了当数据在缓存中过期时,缓存的行为。缓存值依赖 — 定义了一个控件值,这个控件可以在数据期满时自动将其移出缓存。启用缓存 — 可以确认是否缓存了数据。实例为了演示数据缓存,我们创建一个新的网站,在上面添加一个新的网络表单。在数据库中添加一个连接数据访问教程的 SqlDataSource 控件。 在这个实例中,我们给页面添加一个标签,这个标签可以显示页面的回应时间。 <asp:Label ID="lbltime" runat="server"></asp:Label>除了这个标签,整个页面和数据访问教程是一样的。为这个页面添加一个事件处理器,来下载时间。 protected void Page_Load(object sender, EventArgs e){ lbltime.Text = String.Format("Page posted at: {0}", DateTime.Now.ToLongTimeString());}设计的页面应该是如下这个样子的: 当你第一次执行页面时,并没有发生什么不同。标签显示,每次刷新页面,页面会重新加载,而且在标签上会显示时间的变化。 接下来,把数据源控件的 EnableCaching 的属性设置为“真”,将 Cacheduration 属性设置为 “60”。它将实现缓存,缓存将每隔 60 秒到期。 每一次刷新,时间戳都会变化。但如果你在 60 秒之内改变表中的数据,在缓存到期之前将不会显示。 <asp:SqlDataSource ID = "SqlDataSource1" runat = "server" ConnectionString = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString %>" ProviderName = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString.Provide

[1] [2]  下一页


ASP.NET 数据缓存