加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之五十六:使用ObjectDataSource缓存数

发布时间:2016-11-23 22:27:45 所属栏目:MsSql教程 来源:站长网
导读:导言 就计算机科学而言,caching就是将所需要的数据或信息的备份放在某个地方,便于快速访问的这样一个过程。以数据处理(data-driven)程序为例,程序的大部分时间浪费在数据查询上。要提升这种程序的性能,通常的做法是将查询结果存放在程序的存储器里。

  任何时候,当GridView控件需要绑定时,按上述的事件发生顺序执行。比如,首次登录页面;将数据从一个页面传递到另一个页面;在GridView里排序;通过GridView内建的编辑或删除界面改动数据。当GridView的视图(view sta被设为disabled时,每次页面回传时也会对GridView重新绑定;当然我们可以显式地调用DataBind()方法来对GridView实施绑定。

  为了更清除地揭示从数据库检索数据的频率,我们显示一个消息,提示在某时程序在检索数据。为此,在GridView控件上添加一个ID为ODSEvents的Label控件,清除其Text属性,将其EnableViewState属性设置为false。在Label控件下面再添加一个Button控件,设其Text属性为“Postback”.

/uploads/allimg/c161121/14OI94624O60-1KT42.png
图8:在GridView上添加Label 和 Button控件

在整个数据检索过程中,首先触发ObjectDataSource的Selecting事件,并调用其对应的已设置好的方法。为该事件创建一个事件处理器,添加如下的代码:

protected void ProductsDataSource_Selecting(object sender,
 ObjectDataSourceSelectingEventArgs e)
{
 ODSEvents.Text = "-- Selecting event fired";
}

  每当ObjectDataSource开始检索数据时,Label控件都会显示文本“Selecting event fired”.

  在浏览器访问该页面。当首次登录时,文本“Selecting event fired”就会显示出来。点“Postback”按钮时,我们注意到文本消失了(前提是你将GridView的EnableViewState属性设置为默认值true)。这是因为当页面回传时,GridView通过它的视图状态(view state)载入数据进行重建(reconstructed),因此不再需要通过ObjectDataSource检索数据库来得到数据进行重建。然而,排序、分页、编辑等都会促使GridView重新绑定到数据源,因此,文本“Selecting event fired”又出现了。

/uploads/allimg/c161121/14OI9462J610-1L3E2.png
图9:当GridView重新绑定到数据源时,显示文本“Selecting event fired”

/uploads/allimg/c161121/14OI94B0cZ-1M3943.png
图10:点“Postback” 按钮导致GridView从视图状态“View State”获取数据

  每次分页、排序时都需要从数据库检索数据,这看起来有点浪费资源。即便GridView不支持排序和分页,任何人每次第一次登录页面时都需要从数据库检索数据(如果将view state设置为disabled的话,每次页面回转也会检索数据)。如果GridView对所有用户显示的数据都是一样话,那么额外的数据库查询是浪费。我们可以对GetProducts()方法返回的数据进行缓存,再将GridView绑定到这些缓存数据。

第四步:用ObjectDataSource缓存数据

仅仅简单的设置某些属性,我们就可以让ObjectDataSource对它的检索数据自动的进行缓存。以下总结了ObjectDataSource控件的与缓存相关的属性:

EnableCaching—必须设置为true,默认为false.

CacheDuration—缓存时间,以秒为单位。默认为0,只有当EnableCaching属性设置为true,且CacheDuration设为大于0的值时ObjectDataSource控件才会缓存数据。

CacheExpirationPolicy—可设置为Absolute 或 Sliding。如果为Absolute,当它设为多少秒时,ObjectDataSource就会对检索的数据缓存多少秒;如果为Sliding,当它设为多少秒时,一旦超过那么多秒没有对缓存数据进行访问,就终止缓存。默认为Absolute。

CacheKeyDependency—用该属性将ObjectDataSource的缓存条目(entry)与现有的缓存从属体关联起来。利用可以它将缓存条目提前从内存清除掉。绝大多数情况下用该属性把SQL cache dependency与ObjectDataSource的缓存关联起来。这个话题我们将在后面的教程《使用SQL缓存依赖项SqlCacheDependency 》考察。

让我们设置ID为ProductsDataSource的ObjectDataSource 的数据缓存时间为30秒。设其EnableCaching属性为true;设其CacheDuration属性为30;CacheExpirationPolicy属性为默认的Absolute。

/uploads/allimg/c161121/14OI94B30140-1N3F1.png
图11:设置ObjectDataSource的缓存时间为30秒

  保存你的设置,并在浏览器里查看。当你第一次登录页面时,文本“Selecting event fired”会显示出来,因为原始数据还未缓存。但你点“Postback”按钮,或进行分页,排序,或点编辑、取消按钮时,文本“Selecting event fired”就不会显示出来了。原因是只有当ObjectDataSource控件检索数据时才会触发Selecting事件;如果ObjectDataSource控件是从缓存里面获取数据的话就不会触发Selecting事件。

  过了30秒后,数据将从内存清除;或者调用ObjectDataSource控件的Insert, Update,或Delete方法的话数据也会被清除掉。因此,过了30秒后或点击“Update”按钮,编辑,取消按钮,或排序、分页的话就会促使ObjectDataSource检索数据,触发Selecting事件,文本“Selecting event fired”又会显示出来。最后,再对检索得到的数据进行缓存。

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

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读