다음을 통해 공유


Cache 및 ReportDocument 개체 모델의 상태 유지

Cache는 ASP.NET에서 상태를 유지하는 데 사용되는 서버 기반의 접근 방식입니다. Cache는 ASP 및 ASP.NET 모두에 있는 Application 개체와 기능이 유사합니다.

  • Application을 사용하면 응용 프로그램 범위 내에서 개체를 유지할 수 있습니다.
  • Application에 배치된 개체는 모든 사용자가 사용할 수 있습니다. 그러나 전체 응용 프로그램에 일반적으로 적용되는 Application은 사용자별 정보를 유지하도록 디자인되지는 않았습니다.

Cache에는 Application의 이러한 모든 기능 이외에도 임시 데이터를 관리하기 위한 새로운 수준의 기능이 추가되었습니다.

  • 캐시에 추가된 개체를 파일, 키 또는 시간 기반의 종속성에 따라 구성할 수 있습니다. 관련 파일 또는 키가 변경되거나 일정 시간이 경과하면 개체가 캐시에서 자동으로 제거되고, 이후에 해당 개체를 필요로 하는 경우 업데이트된 버전이 캐시에 새로 배치됩니다.
  • 종속성이 지정되지 않고 캐시에 추가된 개체의 사용 빈도가 낮은 경우 해당 개체는 자동으로 만료됩니다.
  • 개체가 캐시에서 제거되면 이벤트가 트리거됩니다. 해당 이벤트에서 실행되는 코드를 작성하여 업데이트된 버전의 개체를 Cache로 로드할 수 있습니다.

원래 키 문자열을 사용하는 대체 버전의 개체가 추가되면 이전 버전을 덮어쓰게 됩니다. 이전 버전을 덮어쓰지 못하게 하려면 대체 정의를 키 문자열에 연결하여 개체의 각 대체 버전이 고유하게 설정되도록 만듭니다.

Application 대신 Cache를 사용하면 Application의 경우와 마찬가지로 모든 사용자가 액세스할 수 있는 정보를 저장할 수 있을 뿐 아니라, 해당 종속성의 변경 사항에 따라 자체 업데이트할 수 있다는 이점이 있습니다.

이 상태 유지 방식의 제한 사항

Cache를 처음 사용하는 개발자는 상태 유지를 위한 모든 경우에 Session 대신 Cache를 사용하려 할 수도 있습니다. 그러나 Cache는 Session 개체의 기능을 대신하도록 디자인된 것이 아닙니다. 사용자별 데이터를 Cache 키에 연결하여 Session 고유성을 에뮬레이트하려고 하면 Session과는 달리 사용자의 제한 시간이 초과한 후에도 만료되지 않는 Cache가 사용자 개체와 함께 로드됩니다. 따라서 Cache를 사용할 때는 Session 개체의 경우보다 더 많은 웹 서버 메모리가 필요합니다.

사용자별 데이터를 유지해야 하는 경우 Session 개체를 계속 사용해야 합니다.

상태 유지를 위한 대체 방법으로는 다음을 참조하십시오.

Cache를 사용하여 ReportDocument 개체 모델 유지

보고서가 ReportDocument 개체 모델 내에 캡슐화된 경우 Session 또는 Cache 같은 서버 기반 접근 방법을 사용하여 ReportDocument 개체 모델을 유지해야 합니다.

다음 두 가지 방법 중 하나로 Cache를 사용하여 ReportDocument 개체 모델 내에서 보고서를 유지할 수 있습니다.

  • 보고서를 인스턴스화한 다음, 보고서를 Session 개체에 할당할 때와 동일한 구문을 사용하여 Cache 개체에 할당합니다.
이 방법은 하나의 매개 변수 및 로그온 자격 증명 집합을 사용하여 ReportDocument 인스턴스가 정확히 한 번만 발생하고 공유 수준이 높은 보고서에만 적용됩니다. 해당 매개 변수와 로그온 정보를 변경하여 ReportDocument 인스턴스가 여러 개 생성된 경우, 동일한 키 문자열을 사용하여 ReportDocument 인스턴스를 Cache 개체에 다시 할당하면 이전 버전의 인스턴스를 덮어쓰게 됩니다. 공유 수준이 높은 캐싱에 대한 자세한 내용은 [""공유 수준이 높은" 보고서 캐시"](ms225489\(v=vs.90\).md)를 참조하십시오.
  • ICachedReport 인터페이스를 구현하는 버전의 보고서 클래스를 인스턴스화합니다.
Crystal Reports SDK에는 보고서의 기본 캐싱 프레임워크가 포함되어 있습니다. ICachedReport 인터페이스를 구현하는 보고서는 매개 변수 및 사용자 로그온 자격 증명을 기반으로 고유한 키와 함께 캐시에 자동으로 추가됩니다. 이 방법은 공유 수준이 높은 모든 보고서에 적용되지만, 매개 변수 및 로그온 자격 증명의 변경이 많지 않으므로 버전의 수가 제한될 수도 있습니다. 사용자별로 공유 수준이 낮은 보고서는 대신 Session 개체에 할당해야 합니다.

ICachedReport를 구현하는 포함 보고서를 유지하려면

  1. 보고서를 프로젝트에 추가합니다.
그러면 포함 보고서 클래스가 만들어집니다. 여기에서는 포함 보고서 클래스의 캐시된 인스턴스를 로드하고 반환하는 캐시된 보고서 클래스도 작성됩니다.
  1. 캐시된 보고서 클래스를 인스턴스화합니다.

  2. 캐시된 클래스 인스턴스를 CrystalReportViewer 컨트롤에 할당합니다.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>이 절차를 수행하는 과정에 대한 자세한 예제는 <a href="ms227391(v=vs.90).md">&quot; 캐시된 포함 보고서 클래스에 바인딩 &quot;</a>을 참조하십시오.</p></td>
</tr>
</tbody>
</table>

ICachedReport를 구현하는 유틸리티 클래스를 통해 비포함 보고서를 유지하려면

  1. 사용자 고유의 캐시 관리 유틸리티 클래스를 만들고 ICachedReport를 구현하도록 설정합니다.

  2. 이 유틸리티 클래스에서 ReportDocument.Load() 메서드를 사용하여 경로 문자열에서 비포함 보고서를 로드합니다.

  3. 비포함 보고서의 ReportDocument 인스턴스를 반환하는 구현 메서드 CreateReport()를 코딩합니다.

  4. 보고서 캐시 관리 유틸리티 클래스를 인스턴스화합니다.

  5. 이 클래스 인스턴스를 CrystalReportViewer 컨트롤에 할당합니다.

    Note참고

    이 절차를 수행하는 과정에 대한 자세한 예제는 "캐시 관리 유틸리티 클래스에 로드된 비포함 보고서에 바인딩"을 참조하십시오.

Cache를 사용한 ReportDocument 개체 모델 유지의 제한 사항

Cache는 사용자들 간에 공유 수준이 높은 ReportDocument 인스턴스를 유지하는 데 사용할 수 있는 가장 좋은 방법입니다. 사용자별 보고서의 경우 Cache를 사용하면 사용자 만료 이후에도 서버 메모리에서 지속되는 응용 프로그램 수준의 사용자 기반 인스턴스를 만들어야 하므로 많은 양의 서버 메모리가 필요합니다. 따라서 사용자별 보고서는 Session에 대신 할당해야 합니다.

Note참고

대부분의 경우 ReportDocument 인스턴스를 유지하는 데는 Session을 사용합니다. Cache(좀 더 구체적으로 ICachedReport 인터페이스)는 보고서의 공유 수준이 높고 보고서가 매우 크거나 너무 복잡하여 데이터를 검색하는 데 몇 분 정도 걸리는 경우에만 사용합니다.

Cache와 Viewstate 비교

Cache는 주로 코드 숨김 클래스에서 개체의 상태를 유지하는 데 사용합니다. ViewState는 주로 웹 페이지에서 컨트롤의 상태를 유지하는 데 사용합니다. 웹 페이지의 컨트롤이 코드 숨김 클래스의 개체에 바인딩되어 있고 페이지를 다시 로드할 때마다 이 둘의 상태를 모두 유지해야 하는 경우, Cache 및 ViewState가 모두 상태 유지 역할을 함께 담당합니다.

이 경우 ViewState는 CrystalReportViewer 컨트롤을 유지하고 Cache는 이 컨트롤에 바인딩된 ReportDocument 개체를 유지합니다.

참고 항목