收藏 分享(赏)

c#缓存介绍.doc

上传人:scg750829 文档编号:7666524 上传时间:2019-05-23 格式:DOC 页数:18 大小:128.50KB
下载 相关 举报
c#缓存介绍.doc_第1页
第1页 / 共18页
c#缓存介绍.doc_第2页
第2页 / 共18页
c#缓存介绍.doc_第3页
第3页 / 共18页
c#缓存介绍.doc_第4页
第4页 / 共18页
c#缓存介绍.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、c#缓存介绍缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能。本章从缓存所在的命名空间“System.Web.Caching”开始,详细介绍框架提供的缓存类和操作方法,主要涉及简单数据的缓存、数据缓存依赖和数据库缓存依赖三个技术要点,最后演示一个完全使用缓存实现数据读取的实例。讲解流程如图 16-1 所示。:图 16-1 缓存命名空间的讲解流程16.1 System.Web.Caching 简介本节从缓存命名空间的总体简介和组成结构入手,从整体上对 Syst

2、em.Web.Caching 进行概述。16.1.1 System.Web.Caching 概述System.Web.Caching 是用来管理缓存的命名空间。缓存就是将服务器端的数据暂时保存在客户端,方便用户的读取。缓存命名空间的父级空间是“System.Web”,由此可以看出,缓存通常用于 Web 网站的开发,包括在 B/S 项目中的开发。缓存的设计主要是考虑到网络带宽可能会延缓数据的提交和回发,如果将数据保存在客户端,用户可以直接从客户端读取数据,这样数据就是从本地提取的,不会再受网络的影响。System.Web.Caching 命名空间提供与缓存有关的所有操作类,具体包括哪些类将在下一

3、节详细介绍。16.1.2 System.Web.Caching 命名空间内的类组成缓存命名空间主要提供三种操作:缓存数据对象、对象的缓存依赖和数据库的缓存依赖。其中缓存任何对象都使用一个类 Cache,但当缓存发生改变时,普通对象和数据库对象的依赖处理不同。图 16-2 罗列的是在三层结构中缓存的部署情况。两个依赖类 CacheDependency 和 SqlCache Dependency 主要更改发生变化的缓存数据,起到通知的作用。当数据没有被缓存时,使用 Cache 类进行添加。下面根据图 16-2 的部署,来介绍图中使用的缓存类。这些类的说明如表 16-1 所示。图 16-2 三层结构

4、中缓存的部署图表 16-1 缓存命名空间中的类及其说明类 名 说 明Cache 对缓存对象的编辑类,其操作包括缓存的增、删、改CacheDependency 基本缓存对象的依赖,当基本对象发生变化时,更新缓存内容SqlCacheDependency 数据库缓存对象的依赖,当数据库中的数据变化时,更新缓存内容16.2 管理缓存的类:Cache 类Cache 类用来存储数据对象,并提供方法对这些对象进行编辑。本节主要介绍 Cache 类包含的方法,以及如何使用这些方法实现数据对象的缓存。16.2.1 功能说明Cache 类属于字典类,其根据一定的规则存储用户需要的数据,这些数据的类型不受限制,可以

5、是字符串、数组、数据表、 Dataset 和哈希表等。使用 Cache 类的优点是当缓存的数据发生变化时,Cache 类会让数据失效,并实现缓存数据的重新添加,然后通知应用程序,报告缓存的及时更新。16.2.2 语法定义Cache 类的语法定义如下:public sealed class Cache : IEnumerable通过其定义可以发现,Cache 类是“sealed”定义的类,表示此类被密封,不能被继承。同时 Cache类还继承了 IEnumerable 接口,表示允许对集合中的数据进行枚举操作。缓存的生命周期随着应用程序域的活动结束而终止,也就是说只要应用程序域依然处于活动状态,缓

6、存就会一直保持,因为每个应用程序域都会创建一个缓存实例。此实例的信息通过 HttpContext 对象的Cache 属性或 Page 对象的 Cache 属性获取。下面的代码演示如何将数组数据添加到缓存中:ArrayList myarray = new ArrayList(); /创建数组数据myarray.Add(“1.学习园地“);myarray.Add(“2.交流论坛“);myarray.Add(“3.帮助“);Cache.Add(“Category“, myarray); /将数组添加到缓存中16.2.3 方法详解Cache 类的方法主要提供对缓存数据的编辑操作,如增、删、改等。其中最

7、常用的方法及其说明如表 16-2 所示。表 16-2 Cache 类的主要方法及其说明名 称 说 明Add 将数据添加到 Cache 对象Insert 向 Cache 中插入数据项,可用于修改已经存在的数据缓存项Remove 移除 Cache 对象中的缓存数据项Get 从 Cache 对象中获取指定的数据项,注意返回的是 Object 类型,需要进行类型转换GetType 从 Cache 对象中获取数据项的类型,判断数据类型后,方便进行转换GetEnumerator 循环访问 Cache 对象中的缓存数据项。注意其返回类型是“IDictionaryEnumerator”技巧:要想修改缓存数据,

8、只需要重新为缓存赋值即可。最需要注意的是 Add 方法,其使用语法如下:public Object Add (string key,Object value,CacheDependency dependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration,CacheItemPriority priority,CacheItemRemovedCallback onRemoveCallback)在使用 Add 方法时,以上 7 个参数是必需的,其代表意义如下: 参数“key”代表缓存数据项的键值,必须是唯一的。 参数“value

9、”代表缓存数据的内容,可以是任意类型。 参数“dependencies”表示缓存的依赖项,也就是此项的更改意味着缓存内容已经过期。如果没有依赖项,可将此值设置为 NULL。 参数“absoluteExpiration”是日期型数据,表示缓存过期的时间,.NET 2.0 提供的缓存在过期后是可以使用的,能使用多长时间,就看这个参数的设置。 参数“slidingExpiration”的类型表示一段时间间隔,表示缓存参数将在多长时间以后被删除,此参数与 absoluteExpiration 参数相关联。 参数 “priority”表示撤销缓存的优先值,此参数的值取自枚举变量“CacheItemPri

10、ority” ,优先级低的数据项将先被删除。此参数主要用在缓存退出对象时。 参数“onRemoveCallback”表示缓存删除数据对象时调用的事件,一般用做通知程序。下面的代码演示了如何应用 Cache 类的这些方法。在使用本代码时需要注意,代码中使用了Arraylist 对象,所以需要添加对命名空间“System.Collections” 的引用,同时使用 Cache 类别忘记了添加命名空间“System.Web.Caching”。protected void Page_Load(object sender, EventArgs e)ArrayList myarray = new Arra

11、yList(); /创建数组数据myarray.Add(“1.学习园地“);myarray.Add(“2.交流论坛“);myarray.Add(“3.帮助“);/将数组添加到缓存中使用 Add 方法Cache.Add(“Category“, myarray, null, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);myarray1 = “2.交流园地“; /修改数组数据Cache.Insert(“Category“, myarray); /使用 Insert 方法修改缓存数据string

12、 tmpStr = “这是一个临时数据 “;Cache“tmpdata“ = tmpStr;/使用 Get 方法获取缓存数据Response.Write(Cache.Get(“tmpdata“).ToString()+“);/Cache“tmpdata“ = “这是一个临时字符串“; /重新为缓存赋值的技巧Response.Write(Cache.Get(“tmpdata“).ToString() + “);/使用 GetType 方法判断缓存数据的类型if (Cache“Category“.GetType().Name = “ArrayList“)Response.Write(“类型是数组“

13、);/使用 GetEnumerator 方法遍历缓存中的数据IDictionaryEnumerator mycache = Cache.GetEnumerator();while (mycache.MoveNext()Response.Write(mycache.Value + “);Cache.Remove(“tmpdata“);/使用 Remove 方法移除缓存的临时数据技巧:在使用 GetType 方法时,如果要判断类型,需要使用 Object.GetType().Name 属性获取类型的名称。上述代码的运行结果如下:这是一个临时数据这是一个临时字符串类型是数组这是一个临时字符串Syst

14、em.Collections.ArrayList其中在读取类型为 ArrayList 的数据时,由于没有进行类型转换,所以取出的是类型为“System.Collections.ArrayList”的对象。本书会在本节最后的实例中介绍如何读取数组的详细内容。16.2.4 属性详解Cache 类的属性主要用来获取缓存数据的一些基本信息,如缓存的项总数、指定位置的缓存项等。本书主要介绍两个属性:Count 和 Item。Count 用来获取缓存中所有的项的总数。使用方法如下:Response.Write(Cache.Count);Item 用于返回指定项的内容,一般继承“IEnumerable”接口

15、的类都有这样的属性,注意项需要使用“ ”包装。其使用方法如下:Response.Write(Cache“Category”.ToString();16.2.5 典型应用:实现数据的缓存快速读取功能Cache 主要用来缓存使用频率高且不需经常更新的数据。本例实现一个目录列表的缓存。为了简便,列表的内容并没有从数据库中读取,而是保存在一个 ArrayList 对象中。本例的目的是将目录列表填充到下拉框中,当缓存失效后,目录列表的内容为空。演示的步骤如下所述。在 VS2005 中创建一个网站,命名为“CacheSample”。打开默认生成的 Default.aspx 页,在其中添加一个下拉列表框和一

16、个按钮。按 F7 键切换到页面的代码视图。不要忘记对命名空间的引用,代码如下:using System.Web.Caching;using System.Collections;在“Page_Load” 事件中判断是否存在目录缓存,如果没有,则将目录添加到缓存中。详细代码如下所示,其中目录列表的保存时间是 5 秒。protected void Page_Load(object sender, EventArgs e)if (!Page.IsPostBack)ArrayList myarray = new ArrayList();/假设 ArrayList 的内容来自数据库myarray.Add

17、(“古代历史“);myarray.Add(“当代文学“);myarray.Add(“流行小说“);myarray.Add(“武侠小说“);if (Cache“Categorys“ = null) /判断是否存在缓存/如果缓存不存在 ,则添加保存时间是 5 秒Cache.Add(“Categorys“, myarray, null, DateTime.Now.AddSeconds(5),TimeSpan.Zero, CacheItemPriority.Normal, null);回到设计视图,双击按钮控件,切换到按钮的事件代码中。在按钮的双击事件中,需要判断是否有目录的缓存,有则在下拉框中显示目

18、录内容,没有则清空下拉框。详细代码如下:protected void Button1_Click(object sender, EventArgs e)if (Cache“Categorys“ != null) /判断缓存是否失效/如果没有失效,则取出缓存的列表,注意类型的转换。DropDownList1.DataSource = (ArrayList)Cache“Categorys“;DropDownList1.DataBind();elseDropDownList1.Items.Clear(); /如果已经失效,则清空列表按 Ctrl+S 组合键保存所有的代码,再按 F5 键运行程序。在

19、5 秒以内如果单击按钮,则正常显示目录列表,如果超过 5 秒,则缓存对象已经不存在,所以下拉列表框的内容为空。本节主要介绍了 Cache 类的使用方法,其中并没有涉及缓存依赖内容,即当实际数据改变时,缓存是否随着改变。下一节将通过学习“CacheDependency”类了解缓存依赖的详细实现。16.3 缓存依赖类:CacheDependency 类CacheDependency 类是架设在 Cache 类和实际数据之间的桥梁。本节将详细介绍如何利用CacheDependency 类实现数据缓存的及时更新。16.3.1 功能说明CacheDependency 类被称为是缓存依赖类,其具体意义表现

20、在当缓存对象的实际数据发生改变时,它能及时通知缓存对象。例如缓存对象“Category”保存的是一个 XML 文件的数据,如果 XML 文件发生了变化,那么系统通过 CacheDependency 类就会及时更新缓存对象 “Category”的内容,这样就能保证用户读取的永远是最新的数据。16.3.2 语法定义CacheDependency 类的语法定义如下:public class CacheDependency : IDisposable其中继承了接口“IDisposable”,此接口主要用来定义释放分配的非托管资源的方法。继承此接口必须实现方法 Dispose,以实现资源的释放。Cach

21、eDependency 类的构造函数实现了 8 个重载,下面的代码列出了这些重载的函数,并详细说明了各函数的参数。了解这些函数就可以知道 CacheDependency 究竟能为缓存带来什么优势。/假设缓存的来源文件是当前目录下的 data.xml 文件/缓存依赖的文件路径CacheDependency mydep = new CacheDependency(“data.xml“);/缓存依赖的文件可以有多个CacheDependency mydep1=new CacheDependency(new string “data.xml“,“data1.xml“);/检查缓存依赖更改的依据时间Ca

22、cheDependency mydep2 = new CacheDependency(“data.xml“, DateTime.Now);/检查多个依赖文件更改的依据时间CacheDependency mydep3 = new CacheDependency(new string “data.xml“, “data1.xml“ , DateTime.Now);/检查依赖多个文件,也依赖多个缓存键值CacheDependency mydep4 = new CacheDependency(new string “data.xml“, “data1.xml“ ,new string “Categor

23、y“, “Category1“ );/关联依赖,还可以依赖于另一个文件缓存依赖CacheDependency mydep5 = new CacheDependency(new string “data.xml“, “data1.xml“ ,new string “Category“, “Category1“ , mydep);/文件和键值上次修改的依据时间CacheDependency mydep6 = new CacheDependency(new string “data.xml“, “data1.xml“ ,new string “Category“, “Category1“ , Dat

24、eTime.Now);/文件、另一个缓存依赖和键值上次修改的依据时间CacheDependency mydep6 = new CacheDependency(new string “data.xml“, “data1.xml“ ,new string “Category“, “Category1“ , mydep,DateTime.Now);16.3.3 方法和属性虽然 CacheDependency 类完成了很重要的功能,但其组成结构却比较简单,主要有两个属性和一个方法。 属性“HasChanged”:判断 CacheDependency 对象是否已更改。 属性“UtcLastModifie

25、d” :返回上次依赖项的修改日期 方法“Dispose”:释放 CacheDependency 对象所占有的资源。因为缓存类继承了接口“IDispose” ,所以必须实现此方法。由于缓存类的构成比较简单,本节并没有给出演示代码,属性和方法的使用将在下一节的实例中演示。注意:只有 Cache 类的 Insert 和 Add 方法才可以为缓存添加依赖项。16.3.4 典型应用:用 CacheDependency 获取最新的数据本例主要演示如何使用 CacheDependency 类实现数据的及时更新。实例中使用一个 GridView 控件显示 XML 文件的数据,当 XML 文件的数据发生改变时,

26、客户端可以及时更新。其实现的功能如图 16-3 所示。图 16-3 用 CacheDependency 获取最新数据的功能实现图演示的详细步骤如下所述。打开 VS2005,创建一个网站,命名为“CacheDependencySample”。在网站根目录下,添加一个 XML 文件,用来为控件提供数据,内容如下:英国古代28.00中国历史20.00打开默认生成的 Default.aspx 页,添加一个 GridView 控件和一个按钮控件。按 F7 键切换到窗体的代码视图,在 Page_Load 事件中书写生成缓存的代码。详细内容如下:private static CacheDependency

27、mydepen;protected void Page_Load(object sender, EventArgs e)if (!IsPostBack)/创建 XML 数据源DataSet myds = new DataSet();/数据源来自文件 data.xmlmyds.ReadXml(this.MapPath(Request.ApplicationPath + “/data.xml“);/判断是否存在缓存if (Cache“BOOKS“ = null)/创建缓存依赖mydepen = new CacheDependency(this.MapPath(Request.Application

28、Path+ “/data.xml“);/添加缓存项Cache.Add(“BOOKS“, myds, mydepen, DateTime.Now.AddSeconds(10), TimeSpan.Zero,CacheItemPriority.Normal, null);注意:使用 XML 文件读取方法,必须添加 XML 操作方法所在的命名空间“System.Xml”。切换回设计视图,再双击按钮控件,此时光标停靠在按钮的 Click 事件内。在此事件内书写代码,判断 XML 文件的数据是否已更新,如果已更新则给出提示,并重新添加缓存依赖项,否则直接从缓存读取 GridView 控件的数据。在“Bu

29、tton1_Click”事件内书写的详细代码如下:protected void Button1_Click(object sender, EventArgs e)/判断缓存是否发生了变化if (mydepen.HasChanged)Response.Write(“Sorry,数据发生了变化!上次修改时间是:“ + mydepen.UtcLastModified);/判断缓存项是否还在if (Cache“BOOKS“ = null)/重新设置缓存项DataSet myds = new DataSet();myds.ReadXml(this.MapPath(Request.ApplicationP

30、ath + “/data.xml“);mydepen = new CacheDependency(this.MapPath(Request.ApplicationPath + “/ data.xml“);Cache.Add(“BOOKS“, myds, mydepen, DateTime.Now.AddSeconds(10), TimeSpan.Zero,CacheItemPriority.Normal, null);GridView1.DataSource = Cache“BOOKS“;GridView1.DataBind();注意:当 XML 文件发生改变后,其实缓存依赖和缓存项都被移除了

31、,必须重新定义。按 Ctrl+S 组合键保存代码的修改。再按 F5 键运行程序,单击“ 获取数据”按钮,GridView就会显示 XML 文件的内容。程序运行正常后,在后台修改 XML 文件的内容,然后再单击“获取数据” 按钮,则出现更改数据的提示,同时 GridView 显示了新的内容。图 16-4 和图 16-5 是数据更改前和更改后的效果对比。图 16-4 初次获取的数据效果图 图 16-5 更改数据后的显示效果图16.4 数据库缓存依赖类: SqlCacheDependency 类数据库缓存依赖主要解决的是当数据库的内容发生改变时,如何及时通知缓存,并更新缓存中的数据的问题。本节就介绍

32、如何使用 SQL Server 2005 和.NET 2.0 实现数据库的缓存依赖。16.4.1 功能说明SqlCacheDependency 类的使用需要结合 SQL Server 2005 数据库,目前还没有 Oracle 数据库的缓存依赖。16.4.2 语法定义SqlCacheDependency 类的使用语法如下:public class SqlCacheDependency : IDisposable其中继承了接口“IDisposable”,此接口主要用来定义释放分配的非托管资源的方法。继承此接口必须实现方法 Dispose,用来实现资源的释放。SqlCacheDependency

33、类主要的构造函数如下:public SqlCacheDependency(string database,string table)其中参数一代表要启用缓存的数据库,参数二表示缓存的表。在实际使用过程中,只需要指明缓存的数据库和表即可。16.4.3 方法和属性SqlCacheDependency 类的方法和属性同 CacheDependency 类相同,主要有三个。 HasChanged:判断数据库缓存依赖是否发生了变化。 UtcLastModified:获取缓存依赖上次更改的时间。 Dispose:释放缓存依赖所占用的资源。这三个成员的使用方法同 CacheDependency 类的成员相似

34、,本节不再赘述。在下节要介绍的使用实例中,将不再使用代码的方式实现缓存依赖,而是使用“OutputCache”在.NET 2.0 中提供的 SqlCacheDependency 参数实现数据库表的缓存。如果要使用编程的方式实现此功能,可参考 CacheDependency 类的实例。16.4.4 使用 SqlCacheDependency 类的操作流程要实现数据库缓存依赖,必须结合数据库的操作。在使用数据库缓存依赖前,必须进行 5 步操作。详细流程如图 16-6 所示。只有具备了上述条件,才可以正常地使用数据库缓存依赖。下一节将结合这 5 步操作演示如何实现数据库的缓存依赖。创建数据库链接图

35、16-6 使用数据库缓存依赖的流程16.4.5 典型应用:获取数据库表最新数据的实例本例要实现的功能是当数据库的内容发生变化时,保存在缓存中的数据项被更新。具体演示的步骤如下所述。在数据库中创建数据库“testCache”。在数据库“testCache” 中添加表“CacheTable”,其信息如表 16-3 所示。表 16-3 CacheTable 表的信息字 段 名 字段类型 说 明id int 自增长数据标识Name nvarchar(20) 书名bookPublish nvarchar(50) 出版社Price decimal(6,2) 书的价格为数据库启用缓存通知。打开“开始”|“所

36、有程序”|“Microsoft Visual Studio 2005”|“Visual Studio Tools”|“Visual Studio 2005 命名提示” 菜单命令。输入如下命令,其中“-ed”和“-et”分别代表启用缓存依赖数据库和启用缓存数据表。aspnet_regsql.exe -S CGJ-57F90CCA64CSQLEXPRESS -E -ed -d testCache -et -t CacheTable注意如果使用的数据库验证方式是“SQL Server 身份验证”,则需要使用如下的启动命令:aspnet_regsql.exe -S CGJ-57F90CCA64CSQL

37、EXPRESS -U -P -ed -d testCache -et -t CacheTable输入命令后,按回车键。如果执行成功,效果如图 16-7 所示。打开 VS2005,新建一个网站,命名为“SqlCacheDependency”。按 F5 键运行程序,主要目的是生成一个默认的 Web.Config 文件。然后关闭运行的程序。在 Web.config 中配置数据库连接字符串,代码如下:图 16-7 启用数据库缓存依赖成功的提示图在“system.web”节点内,添加数据库缓存依赖的配置,详细代码如下所示。注意配置中的“connectionStringName”属性,要与前面创建的数据库

38、连接字符串的名字相对应。按 Ctrl+S 组合键保存配置文件的更改。打开默认生成的 Default.aspx 页,在设计视图中添加一个 GridView 控件,用来显示从数据库获取的数据。再添加一个 Literal 控件,主要用来显示时间,通过时间判断显示的是否是缓存中的数据。为 GridView 配置数据源。单击其任务列表,在“选择数据源”下拉框中,单击“新建数据源”命令,打开数据源的配置向导。在打开的数据源类型窗口中,选择“ 数据库”,单击“确定”按钮,出现选择连接字符串窗口,通过下拉列表选择刚刚创建的 “TestCacheConnectionString”连接串。单击“下一步”按钮,出现

39、 “配置 Select 语句” 对话框,在“列” 列表框中选择“*”,表示选中所有列。单击“下一步 ”按钮出现测试查询对话框,然后单击“完成” 按钮。按 F7 键切换到到代码视图,在“Page_Load”事件中添加如下代码(主要是显示当前的时间,用来判断是否是缓存数据):Literal1.Text = DateTime.Now.ToString();按 Ctrl+S 组合键保存当前页的设计,再按 F5 键运行程序。当刷新页面时,可以看到时间是不断变化的,这说明数据并没有来自缓存。打开 Default.aspx 页,在源代码视图的 “注意:Duration 参数是表示缓存的过期时间,单位是毫秒。

40、按 F5 键运行程序,此时再刷新页面,发现当前的时间已经不再变化,因为整个页的数据被缓存了起来。此时修改数据库的内容,然后刷新运行着的页面,可以发现,数据跟着发生了变化。这就是数据库缓存依赖的体现。当数据库内容更新时,不管缓存的时间有没有到,缓存的内容都会被更新。16.5 Session 和 Cache 的区别以前实现数据的缓存有很多种方法,有客户端的 Cookie,有服务器端的 Session 和 Application。其中 Cookie 是保存在客户端的一组数据,主要用来保存用户名等个人信息。Session 则保存对话信息。Application 则是保存在整个应用程序范围内的信息,相当

41、于全局变量。通常使用最频繁的是 Session,那么 Session 和 Cache 又有什么区别呢?本节结合使用经验,详细介绍 Session 缓存和 Cache 缓存的区别。(1)最大的区别是 Cache 提供缓存依赖来更新数据,而 Session 只能依靠定义的缓存时间来判断缓存数据是否有效。(2 )即使应用程序终止,只要 Cache.Add 方法中定义的缓存时间未过期,下次开启应用程序时,缓存的数据依然存在。而 Session 缓存只是存在于一次会话中,会话结束后,数据也就失效了。(3 )Session 容易丢失,导致数据的不确定性,而 Cache 不会出现这种情况。( 4)由于 Se

42、ssion 是每次会话就被加载,所以不适宜存放大量信息,否则会导致服务器的性能降低。而 Cache 则主要用来保存大容量信息,如数据库中的多个表。(5)VS2005 的测试版提供了将缓存保存在硬盘上的参数,但正式版中取消了这个功能,估计其在以后版本中会重新实现。而 Session 目前只能保存在内存中,对其性能有影响。为了提高 Cache 的有效利用率,建议对于不经常改动的数据使用 Cache。16.6 小结本章主要介绍了如何使用 System.Web.Caching 命名空间下的类,主要包括以下三个: Cache, CacheDependency 和 SqlCacheDependency。Cache 类主要用来创建缓存项,主要针对的是数据不经常改变,但又使用频繁的数据表或文件。另两个类是.NET 2.0 新添加的缓存依赖服务。通过文件依赖或数据库依赖,可以实现缓存数据的及时更新。通过本章的学习,希望可以提高读者编写的网站的数据读取速度,节约带宽,为 Web 2.0 时代的到来打下坚实的基础。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报