快速业务通道

ASP.NET 2.0数据教程之五十八:用ObjectDataSource缓存数据

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
来。最后,再对检索得到的数据进行缓存。

注意 :

如果你看到文本“Selecting event fired”频繁的出现, 很可能是内存容量太小。如果没有足够的容量,ObjectDataSource添加到内存的 数据可能被清除掉了。如果ObjectDataSource没有或者只是偶尔地对数据缓存, 请关闭一些应用程序来释放掉内存,然后再试一次。

图12揭示了 ObjectDataSource的缓存流程。当文本“Selecting event fired”出 现在屏幕上时,那是因为数据没有在缓存里找到,必须进行相关检索。当文本消 失时,那是因为数据进行了缓存。当从缓存得到了所需的数据时,没有任何数据 查询执行。

ASP.NET 2.0数据教程之五十八:用ObjectDataSource缓存数据

图12:ObjectDataSource在Data Cache里存储和获取数据

每一 个ASP.NET应用程序有它自己的数据缓存实例,所有的页面和用户都可以进行访问 。那意味着对于ObjectDataSource控件缓存的数据,所有登录该页面的用户都可 以访问。来做个验证,在一个浏览器里打开ObjectDataSource.aspx页面,当第一 次登录该页面时,文本“Selecting event fired”显现出来(假定前 面测试时缓存的数据到此时已经被清除掉了)。再开第二个浏览器,将第一个浏览 器里的URL地址拷贝、粘贴过来。在第二个浏览器里,文本“Selecting event fired”并没有显示出来,因为它使用的是第一个浏览器页面缓存的 数据。

当向内存添加检索数据时,ObjectDataSource要用到一个叫cache key的值,该值包括:CacheDuration 和 CacheExpirationPolicy属性的值; ObjectDataSource调用的业务对象的类型(type),它由TypeName 属性指定(比如 :ProductsBLL);SelectMethod 属性的值,以及SelectParameters参数集里参数 的name 和 values;StartRowIndex 和 MaximumRows属性的值,它用来执行用户 自定义分页(custom paging)。

将这些属性值组合在一起构成cache key值 是为了对每一个缓存条目提供唯一的标识值。比如,在前面的教程里,我们使用 ProductsBLL类的GetProductsByCategoryID(categoryID)方法来获取某个指定类 的所有产品。假如一个用户在页面查看饮料类(其CategoryID值为1)的产品信息, 如果ObjectDataSource控件在进行数据缓存时忽略SelectParameters的值,当另 一个用户登录页面查看调味品类的产品信息时,恰好饮料类产品信息正好缓存在 内存里,第二个用户将会看到饮料类的产品信息,而非他想要的调味品类的产品 信息。所以,当cache key值包含electParameters的值的话,ObjectDataSource 缓存数据的时候就可以将调味品类和饮料类区分开来。

数据更新不同步 (Stale Data)问题

当调用ObjectDataSource控件的Insert, Update和 Delete其中一个方法时,它都会将缓存条目从内存清除掉。这样做的好处在于当 从页面修改数据时将缓存的旧数据清除掉。然而,ObjectDataSource还是可能有 将“未更新数据”(也就是源数据已经发生改变,而缓存的数据没同步 更新)显示出来的情况。最简单的例子是直接从数据库修改数据,比如某个数据库 管理员运行一个脚本,修改数据库里的某些记录。

在此,我们探讨一种微 妙的情况。虽然调用ObjectDataSource的数据修改方法时它会将缓存数据清除掉 ,但清除的是那些与ObjectDataSource的“属性组合值” (combination of property)相匹配的缓存条目(比如CacheDuration, TypeName, SelectMethod等)。假如你有2个ObjectDataSources控件,它们更新相同的数据, 当使用不同的SelectMethods 或 SelectParameters,当第一个ObjectDataSources 控件更新某一行记录而清除该行对应的缓存数据时,第二个ObjectDataSources控 件仍然使用该行对应的缓存数据。我们来做个验证,创建一个页面,包含可编辑 的GridView控件,其对应的ObjectDa

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号