다음을 통해 공유


데이터 소스 컨트롤을 사용하여 데이터 캐싱

업데이트: 2007년 11월

데이터 소스 컨트롤은 GridView, FormViewDetailsView 컨트롤과 같은 데이터 바인딩된 컨트롤에 데이터 서비스를 제공합니다. 예를 들어 데이터가 자주 변경되지 않는 응용 프로그램의 성능을 향상시키기 위해 데이터 캐싱 서비스를 제공합니다.

SqlDataSource 또는 AccessDataSource 컨트롤을 사용하여 데이터를 캐시하려면 이러한 컨트롤의 DataSourceMode 속성을 DataSet으로 설정해야 합니다. ObjectDataSource 컨트롤은 내부 비즈니스 개체에서 반환된 개체를 캐시할 수 있습니다. 그러나 리소스를 포함하거나 여러 요청 간에 공유할 수 없는 상태를 유지 관리하는 개체는 캐시하면 안 됩니다(예: 열려 있는 DataReader 개체).

데이터 소스 컨트롤을 사용하여 캐싱 설정

캐싱 기능은 데이터 소스 컨트롤에 기본으로 설정되지 않지만 컨트롤의 EnableCaching 속성을 true로 설정하여 캐싱을 사용하도록 할 수 있습니다. 캐시된 데이터는 CacheDuration 속성을 사용하여 지정한 시간(초) 간격에 따라 새로 고쳐집니다.

CacheExpirationPolicy 속성을 설정하여 데이터 소스 컨트롤의 캐싱 동작을 구체적으로 지정할 수 있습니다. 속성 값을 Absolute로 설정하면 CacheDuration 값이 초과할 경우 캐시를 새로 고칩니다. CacheExpirationPolicy 속성을 Sliding으로 설정하면 캐시된 항목에 마지막으로 액세스한 이후에 CacheDuration 값이 초과한 경우에만 캐시를 새로 고칩니다.

중요:

클라이언트 가장이 설정되어 있고 클라이언트 ID에 따라 데이터 소스의 결과를 검색하는 경우, EnableCaching 속성을 false로 설정하는 것이 좋습니다. 캐싱이 설정되면 단일 사용자에 대해 캐시된 데이터를 모든 사용자가 볼 수 있으며 원하지 않는 소스에 중요한 정보가 노출될 수 있습니다. identity 구성 요소의 impersonate 특성이 true로 설정되고 웹 서버에서 응용 프로그램에 대해 익명 ID를 사용할 수 없는 경우 클라이언트 가장이 사용됩니다.

다음 코드 예제에서는 20초 간격으로 데이터를 새로 고치도록 구성된 SqlDataSource 컨트롤을 보여 줍니다.

<%@ 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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

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

            <asp:GridView
                id="GridView1"
                
                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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

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

            <asp:GridView
                id="GridView1"
                
                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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                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"
                
                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 컨트롤을 사용한 데이터 캐싱을 참조하십시오.

참고 항목

기타 리소스

데이터 소스 웹 서버 컨트롤