ASP.NET의 페이지 부분 캐싱(Page Fragment Caching)
이전의 출력 캐싱(Output Caching)과 다른 점은 페이지의 일부를 사용자 정의 컨트롤로 만들어 사용자 컨트롤을 캐싱 하는 것이다. 페이지 캐싱은 전체 페이지를 캐싱하므로 비 실용적일 때도 있다. ASP.NET에서는 부분 캐싱이라고 불리는 페이지 컨텐트의 캐싱 영역을 분리하여 출력하는 간단한 방법을 제공 한다.
1. VS.NET 새 프로젝트를 생성 한다. FragmentCaching 이라고 이름을 주자.
2. FragmentCaching.aspx 파일을 만들어 아래의 코드를 붙여 넣자.
<%@ Register TagPrefix="ucssj" TagName="DataControl" Src="datactrl.ascx" %>
<HTML>
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs E ) {
TimeMsg.Text = DateTime.Now.ToString("G");
}
</script>
<body>
<h3>
<font face="Verdana">페이지 부분 캐싱</font>
</h3>
<ucssj:DataControl runat="server" ID="Datacontrol1" NAME="Datacontrol1" />
<i>페이지 마지막 생성일시:</i>
<asp:label id="TimeMsg" runat="server" />
</body>
</HTML>
3. 프로젝트에서 마우스 오른쪽 버튼을 눌러 [추가] [웹 사용자 정의 컨트롤] 을 선택하여 사용자 정의 컨트롤 파일 datactrl.ascx 파일을 추가 하자. 그 내용은 다음과 같다.
<%@ OutputCache Duration="60" VaryByParam="gbn1" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs E ) {
String selectCmd;
String gbn1 = Request["gbn1"];
//수가구분에 따라 병원 수가 테이블에서 데이터 추출
if( gbn1 == null ) {
selectCmd = "select sname1, sbun, sjum, skum from HSuga";
}
else {
selectCmd = "select sname1, sbun, sjum, skum from HSuga where gbn1 = " + gbn1 ;
}
SqlConnection myConnection = new SqlConnection(
"data source=localhost; initial catalog=DentalDB;" +
"persist security info=True;user id=sa;password=osstem");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "HSuga");
MyDataGrid.DataSource=new DataView(ds.Tables[0]);
MyDataGrid.DataBind();
TimeMsg.Text = DateTime.Now.ToString("G");
}
</script>
<table cellspacing="0" cellpadding="3" rules="all" style="BORDER-LEFT-COLOR:black;BORDER-BOTTOM-COLOR:black;WIDTH:700px;BORDER-TOP-COLOR:black;BORDER-COLLAPSE:collapse;BACKGROUND-COLOR:#aaaadd;BORDER-RIGHT-COLOR:black">
<tr>
<td>
<a href="FragmentCaching.aspx?gbn1=1">진찰료</a>
</td>
<td>
<a href="FragmentCaching.aspx?gbn1=5">처치 수술료</a>
</td>
<td>
<a href="FragmentCaching.aspx?gbn1=8">검사료</a>
</td>
</tr>
</table>
<p>
<ASP:DataGrid id="MyDataGrid" runat="server" Width="700px" BackColor="#CCCCFF" BorderColor="Black"
CellPadding="3" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" Height="153px"
Font-Names="Verdana" PageSize="5">
<HeaderStyle BackColor="#AAAADD"></HeaderStyle>
</ASP:DataGrid>
<p><i>컨트롤 내에서 마지막 생성 일시:</i>
<asp:label id="TimeMsg" runat="server" /></p>
[실행 결과]
내부의 사용자 정의 컨트롤로 만든 부분은 리로드 할 때 마다 시간이 바뀌지 않는다. 60초동안 캐시 되기 때문 이다.
이전의 출력 캐싱(Output Caching)과 다른 점은 페이지의 일부를 사용자 정의 컨트롤로 만들어 사용자 컨트롤을 캐싱 하는 것이다. 페이지 캐싱은 전체 페이지를 캐싱하므로 비 실용적일 때도 있다. ASP.NET에서는 부분 캐싱이라고 불리는 페이지 컨텐트의 캐싱 영역을 분리하여 출력하는 간단한 방법을 제공 한다.
1. VS.NET 새 프로젝트를 생성 한다. FragmentCaching 이라고 이름을 주자.
2. FragmentCaching.aspx 파일을 만들어 아래의 코드를 붙여 넣자.
<%@ Register TagPrefix="ucssj" TagName="DataControl" Src="datactrl.ascx" %>
<HTML>
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs E ) {
TimeMsg.Text = DateTime.Now.ToString("G");
}
</script>
<body>
<h3>
<font face="Verdana">페이지 부분 캐싱</font>
</h3>
<ucssj:DataControl runat="server" ID="Datacontrol1" NAME="Datacontrol1" />
<i>페이지 마지막 생성일시:</i>
<asp:label id="TimeMsg" runat="server" />
</body>
</HTML>
3. 프로젝트에서 마우스 오른쪽 버튼을 눌러 [추가] [웹 사용자 정의 컨트롤] 을 선택하여 사용자 정의 컨트롤 파일 datactrl.ascx 파일을 추가 하자. 그 내용은 다음과 같다.
<%@ OutputCache Duration="60" VaryByParam="gbn1" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs E ) {
String selectCmd;
String gbn1 = Request["gbn1"];
//수가구분에 따라 병원 수가 테이블에서 데이터 추출
if( gbn1 == null ) {
selectCmd = "select sname1, sbun, sjum, skum from HSuga";
}
else {
selectCmd = "select sname1, sbun, sjum, skum from HSuga where gbn1 = " + gbn1 ;
}
SqlConnection myConnection = new SqlConnection(
"data source=localhost; initial catalog=DentalDB;" +
"persist security info=True;user id=sa;password=osstem");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "HSuga");
MyDataGrid.DataSource=new DataView(ds.Tables[0]);
MyDataGrid.DataBind();
TimeMsg.Text = DateTime.Now.ToString("G");
}
</script>
<table cellspacing="0" cellpadding="3" rules="all" style="BORDER-LEFT-COLOR:black;BORDER-BOTTOM-COLOR:black;WIDTH:700px;BORDER-TOP-COLOR:black;BORDER-COLLAPSE:collapse;BACKGROUND-COLOR:#aaaadd;BORDER-RIGHT-COLOR:black">
<tr>
<td>
<a href="FragmentCaching.aspx?gbn1=1">진찰료</a>
</td>
<td>
<a href="FragmentCaching.aspx?gbn1=5">처치 수술료</a>
</td>
<td>
<a href="FragmentCaching.aspx?gbn1=8">검사료</a>
</td>
</tr>
</table>
<p>
<ASP:DataGrid id="MyDataGrid" runat="server" Width="700px" BackColor="#CCCCFF" BorderColor="Black"
CellPadding="3" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" Height="153px"
Font-Names="Verdana" PageSize="5">
<HeaderStyle BackColor="#AAAADD"></HeaderStyle>
</ASP:DataGrid>
<p><i>컨트롤 내에서 마지막 생성 일시:</i>
<asp:label id="TimeMsg" runat="server" /></p>
[실행 결과]
내부의 사용자 정의 컨트롤로 만든 부분은 리로드 할 때 마다 시간이 바뀌지 않는다. 60초동안 캐시 되기 때문 이다.
![]() | ![]() ![]() | 12-27 | 2520 | |
![]() | ![]() ![]() | 12-11 | 1849 | |
53 | ![]() ![]() | 03-15 | 1657 | |
52 | ![]() ![]() | 01-31 | 1746 | |
51 | ![]() ![]() | 01-31 | 2516 | |
50 | ![]() ![]() | 01-31 | 1391 | |
49 | ![]() ![]() | 01-19 | 1691 | |
48 | ![]() ![]() | 01-11 | 1579 | |
47 | ![]() ![]() | 01-03 | 2094 | |
46 | ![]() ![]() | 12-27 | 2520 | |
45 | ![]() ![]() | 12-19 | 1808 | |
44 | ![]() ![]() | 12-14 | 1791 | |
43 | ![]() ![]() | 12-11 | 1849 | |
42 | ![]() ![]() | 12-09 | 1451 | |
41 | ![]() ![]() | 12-01 | 1674 | |
40 | ![]() ![]() | 12-01 | 1849 | |
39 | ![]() ![]() | 12-01 | 1320 |
댓글 없음:
댓글 쓰기