ASP 캐시.NET 페이지의 일부

6099 단어 asp.net
때때로 전체 페이지를 캐시하는 것은 비현실적이다.모든 요청의 동적 생성 페이지의 일부분이 필요할 수도 있습니다.이러한 상황에서, 당신은 대량의 서버 자원을 필요로 하는 페이지 요청과 관련된 대상이나 데이터를 표시하는 데 시간을 들일 수 있습니다.이 항목을 표시하면 웹 창 사용자 컨트롤에서 이 항목을 만들어서 페이지의 다른 부분에서 분리한 다음 지정한 시간 동안 캐시를 해서 서버 자원을 절약할 수 있습니다.이것이 바로 통상적으로 말하는 세션 캐시입니다.
이 기술은 귀중한 프로세서 시간을 들여 만든 페이지의 일부 부분 (예를 들어 데이터베이스 조회) 을 페이지의 다른 부분과 분리할 수 있도록 합니다.요청마다 서버 자원이 적은 페이지를 동적으로 생성할 수 있는 부분을 선택할 수 있습니다.
캐시할 페이지의 부분을 표시하고, 이 부분의 모든 부분을 봉인하는 사용자 컨트롤을 만들면, 사용자 컨트롤의 캐시 정책을 확인해야 합니다.코드 숨김 클래스에서 사용자 컨트롤을 만들 때 @ OutputCache 명령을 사용하여 정책을 선언하거나 PartialCachingAttribute 클래스를 사용하여 정책을 프로그래밍 방식으로 설정할 수 있습니다.
예를 들어 다음 명령을 사용자 컨트롤 파일의 맨 위에 포함하면, 이 컨트롤의 한 버전은 출력 캐시에 120초를 저장합니다.
<%@ OutputCache Duration="120" VaryByParam="None" %>

마찬가지로 코드 숨김 개발 방법으로 사용자 컨트롤을 개발하면 클래스 성명의 메타데이터에 다음 속성을 포함할 때 컨트롤 버전은 출력 캐시에 120초를 저장합니다.
[C#]

[PartialCaching(120)]

[Visual Basic]

<PartialCaching(120)>

이 기술 중 하나를 사용하면 사용자 컨트롤을 포함하는 페이지를 요청할 때 사용자 컨트롤만 캐시합니다.
페이지에서 출력 캐시에 지정된 사용자 컨트롤을 선언하고 사용한 경우 ASP.NET 페이지 분석기는 사용자 컨트롤을 만드는 방법에 따라 두 객체 유형 중 하나를 인스턴스화합니다.사용자 컨트롤을 성명으로 만들면
StaticPartialCachingControl 객체,하면, 만약, 만약...
LoadControl 메서드는 프로그래밍 방식으로 사용자 컨트롤을 만들고
PartialCachingControl 객체따라서 요청 페이지를 요청할 때 페이지가 캐시되지 않으면 분석기는 사용자 컨트롤러가 페이지의 컨트롤러 차원 구조에서 차지하는 논리적 위치에 대상을 넣는다.
페이지 출력에 설정할 수 있는 속성에 대한 자세한 내용은 @ OutputCache 명령에 대한 설명서를 참조하십시오.사용자 컨트롤을 개발하는 방법에 대한 더 많은 정보는 웹 창 사용자 컨트롤을 참고하십시오.
사용자 컨트롤을 페이지의 다른 서버 컨트롤에 끼워 넣을 수 있기 때문에 출력 캐시에 넣은 사용자 컨트롤도 끼워 넣을 수 있습니다.이것은 출력 캐시 명령을 출력 캐시 페이지의 사용자 컨트롤에 포함하거나 다른 출력 캐시 사용자 컨트롤의 일부분인 사용자 컨트롤에 포함시킬 수 있음을 의미한다.
세션 캐시를 사용할 때 자주 발생하는 오류
출력 캐시에 지정된 사용자 컨트롤 태그에 ID 속성을 선언하여 사용자 컨트롤의 인스턴스를 프로그래밍할 수 있습니다.단, 코드가 정상적으로 작동하도록 하기 위해서, 이 사용자 컨트롤이 출력 캐시에 존재하는지 현시적으로 검증해야 합니다.
예를 들어, 사용자 컨트롤에 IDMyUserControl를 선언으로 지정하면 를 사용할 수 있습니다.aspx 파일의 코드 설명 블록에 있는 다음 코드는 사용자 컨트롤이 존재하는지 확인합니다.
[C#]

void Page_Load() {

    if (MyUserControl != null)

       // Place code manipulating MyUserControl here.

}

[Visual Basic]

Sub Page_Load()

    If MyUserControl <> Null Then

       ' Place code manipulating MyUserControl here.

    End If  

End Sub

@ OutputCache 명령을 포함하는 사용자 컨트롤을 조작하기 위해 코드를 작성하면 오류가 발생합니다.출력 캐시가 실행된 사용자 컨트롤만 처음으로 동적으로 요청하기;지정한 시간이 만료되기 전에 출력 캐시에서 모든 다음 요청을 충족시킵니다.사용자 컨트롤이 실례화되었는지 확인하면 포함된 페이지에서 사용자 컨트롤을 프로그래밍 방식으로 조작할 수 있습니다.이 논리를 Page 와 같은 사용자 컨트롤과 연결된 페이지 생존 기간 이벤트에 포함할 수 있습니다.Load 이벤트 또는 PagePreRender 이벤트에서
출력 캐시 설정이 있는 사용자 컨트롤러가 출력 캐시 설정이 있는 웹 창에 존재할 때 발생하는 상황도 주의해야 한다.만약 페이지 출력 캐시 저장 지속 시간이 사용자 컨트롤 출력 캐시 저장 지속 시간보다 길다면, 페이지 출력 캐시 저장 지속 시간은 전체 페이지 (사용자 컨트롤 포함) 에 유효하다.예를 들어 페이지 출력 캐시가 100초로 설정되고 사용자 컨트롤 출력 캐시가 50초로 설정되면 전체 페이지는 출력 캐시에 100초를 저장하고 사용자 컨트롤의 비교적 짧은 시간 설정과 무관하다.다음 예는 이 점을 설명한다.
page01.aspx
[C#]

<%@ Page language="C#" %>

<%@ Register tagprefix="myControl" tagname="Time" src="uc01.ascx" %>

<%@ OutputCache duration="100" varybyparam="none" %>



<myControl:Time runat="server" /><br> <br> <br>



This page was most recently generated at:<p>



 <% DateTime t = DateTime.Now; 

    Response.Write(t); %>

[Visual Basic]

<%@ Register tagprefix="myControl" tagname="Time" src="uc01.ascx" %>

<%@ OutputCache duration="100" varybyparam="none" %>



<myControl:Time runat="server" /><br> <br> <br>



This page was most recently generated at:<p>

 <% Dim t As DateTime = DateTime.Now

Response.Write(t) %>

uc01.ascx
[C#]

<% @Control language="C#" %>

<% @OutputCache duration="100" varybyparam="none" %>



This user control was most recently generated at:<p>



<% DateTime t = DateTime.Now; 

    Response.Write(t); %>

[Visual Basic]

<% @OutputCache duration="100" varybyparam="none" %>



This user control was most recently generated at:<p>

<% Dim t As DateTime = DateTime.Now

Response.Write(t) %>

단, 페이지 출력 캐시 메모리 지속 시간이 사용자 컨트롤러보다 짧으면, 메모리 시간이 만료될 때까지 캐시 사용자 출력 컨트롤러를 사용합니다. 이 페이지의 나머지 부분이 요청에 의해 다시 생성되었음에도 불구하고.예를 들어 페이지 출력 캐시가 50초로 설정되고 사용자 컨트롤 출력 캐시가 100초로 설정되면 페이지의 나머지 부분은 두 번 만료될 때마다 사용자 컨트롤이 한 번 만료된다.아래의 이 간단한 예는 이 점을 설명하였다.
page02.aspx
[C#]

<%@ Page language="C#" %>

<%@ Register tagprefix="myControl" tagname="Time" src="uc02.ascx" %>



<%@ OutputCache duration="50" varybyparam="none" %>



<myControl:Time runat="server" /><br> <br> <br>



This page was most recently generated at:<p>



 <% DateTime t = DateTime.Now; 

    Response.Write(t); %>

[Visual Basic]

<%@ Register tagprefix="myControl" tagname="Time" src="uc02.ascx" %>

<%@ OutputCache duration="50" varybyparam="none" %>



<myControl:Time runat="server" /><br> <br> <br>



This page was most recently generated at:<p>

 <% Dim t As DateTime = DateTime.Now

Response.Write(t) %>

uc02.ascx
[C#]

<% @Control language="C#" %>

<% @OutputCache duration="100" varybyparam="none" %>



This user control was most recently generated at:<p>



<% DateTime t = DateTime.Now; 

    Response.Write(t); %>

[Visual Basic]

<% @OutputCache duration="100" varybyparam="none" %>



This user control was most recently generated at:<p>

<% Dim t As DateTime = DateTime.Now

Response.Write(t) %>

좋은 웹페이지 즐겨찾기