www.baike369.com
百科369 > ASP.NET教程 > ASP.NET使用SqlDataSource控件缓存数据库数据

ASP.NET使用SqlDataSource控件缓存数据库数据


ASP.NET使用SqlDataSource控件缓存数据库数据

如果需要显著提高数据库驱动的Web站点的性能,最简单的方法是使用缓存。在网页上进行操作时,从数据库获取数据是最慢的操作之一,但从内存获取数据却非常快。

使用SqlDataSource控件可以在Web服务器端内存中缓存数据,以避免每次页面请求时都要进行数据库连接操作。


实例

在CacheSqlDataSource.aspx网页中显示被缓存在内存中的电影列表。程序代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CacheSqlDataSource.aspx.cs" Inherits="CacheSqlDataSource" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected void srcMovies_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        lblMessage.Text = "从数据库中获取数据!";
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>ASP.NET使用SqlDataSource控件缓存数据库数据-www.baike369.com</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    <asp:Label
        id="lblMessage"
        EnableViewState="false"
        Runat="server">
    </asp:Label>

    <br /><br />

    <asp:GridView
        id="grdMovies"
        DataSourceID="srcMovies"
        Runat="server">
    </asp:GridView>

    <asp:SqlDataSource
        id="srcMovies"
        EnableCaching="True"
        CacheDuration="3600"
        SelectCommand="SELECT * FROM Movies"
        ConnectionString="<%$ ConnectionStrings:Movies %>"
        Runat="server" OnSelecting="srcMovies_Selecting">
    </asp:SqlDataSource>

    </div>
    </form>
</body>
</html>

执行结果如下:

ASP.NET使用SqlDataSource控件缓存数据库数据的操作效果

第一次执行时,从数据库中获取数据,第二次或多次执行时,将从内存中获取数据。因为程序在第一次执行中已经将数据缓存到了内存中。

在CacheSqlDataSource.aspx页面中,设定了SqlDataSource控件两个和缓存有关的属性。首先是EnableCaching属性设置为真,然后是CacheDuration属性设置为3600秒(1小时)。缓存在内存中的电影数据的过期时间是1小时,如果没有给CacheDuration属性赋值,默认值是Infinite(不限时)。

在CacheSqlDataSource.aspx页面中包含一个名为srcMovies_Selecting()的事件处理程序。这个事件处理程序只有在从数据库而不是内存获取数据的时候才会被调用。换句话说,使用这个事件处理程序可以检测电影是否是从缓存中获取的。


提示

一定要清楚地知道,SqlDataSource控件不一定会将数据缓存到CacheDuration属性指定的时间。实际上,SqlDataSource控件是使用缓存对象进行缓存的。这个对象支持回收。如果内存资源不足的话,缓存对象可以自动清除缓存。

Copyright© 2011-2016 www.baike369.com All Rights Reserved