Поделиться через


Кэширование элементов при помощи элементов управления источниками данных

Обновлен: Ноябрь 2007

Элементы управления источниками данных предоставляют службы данных для элементов управления с привязкой к данным, таким как элементы управления GridView, FormView, и DetailsView. Эти службы включают кэширование данных для улучшения производительности приложений, в которых данные не меняются часто.

Чтобы кэшировать данные при помощи элементов управления SqlDataSource или AccessDataSource, необходимо установить свойство DataSourceMode этих элементов управления на DataSet. Элемент управления ObjectDataSource может кэшировать объекты, возвращаемые основным бизнес-объектом. Однако не следует кэшировать объекты, содержащие ресурсы или поддерживающие состояние, которое не может использоваться совместно несколькими запросами, например, открытый объект DataReader.

Включение кэширования при помощи элемента управления источниками данных

Кэширование не включено по умолчанию для элементов управления источниками данных, но его можно включить, присвоив свойству элемента управления EnableCaching значение true. Кэшированные данные обновляются в соответствии с количеством секунд, заданных свойством CacheDuration.

Можно дополнительно настроить поведение кэширования элемента управления источниками данных, установив свойство CacheExpirationPolicy. Присвоение свойств значения Absolute приводит к обновлению кэша при превышении значения CacheDuration. Если свойству CacheExpirationPolicy присвоено значение Sliding, то кэш обновляется только в случае превышения значения CacheDuration с момента последнего обращения к кэшу.

ms227994.alert_caution(ru-ru,VS.90).gifВажное примечание.

Рекомендуется присваивать свойству EnableCaching значение false, когда используется олицетворение клиента и результаты из источника данных извлекаются на основе учетных данных клиента. Если кэширование включено, кэшированные данные одного пользователя могут быть доступны для просмотра всем пользователям и возможно предоставление конфиденциальных сведений нежелательному источнику. Олицетворение клиента разрешается, когда атрибуту impersonate элемента конфигурации identity присваивается значение true, и на веб-сервере для данного приложения отключена анонимная идентификация.

В следующем примере кода показан элемент управления SqlDataSource, выполняющий обновление данных каждые 20 секунд:

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <asp:SqlDataSource
                id="SqlDataSource1"
                runat="server"
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                runat="server"
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <asp:SqlDataSource
                id="SqlDataSource1"
                runat="server"
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                runat="server"
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <asp:SqlDataSource
                id="SqlDataSource1"
                runat="server"
                DataSourceMode="DataSet"
                ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                runat="server"
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </Columns>
            </asp:GridView>

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

Сложные сценарии кэширования

Если вы используете элемент управления SqlDataSource с поставщиком System.Data.SqlClient, то можете воспользоваться преимуществами класса SqlCacheDependency, обеспечивающего обновление кэшированных данных только при изменении таблицы источника в базе данных. Дополнительные сведения см. в разделе Кэширование данных с помощью элемента управления SqlDataSource.

См. также

Другие ресурсы

Серверные веб-элементы управления источников данных