2010-07-06 3 views
3

캐싱과 관련하여 대부분의 문제를 해결했습니다. 그러나 여전히 한 가지가 있습니다. 출력 캐싱을 사용하는 UserControl이 있습니다. 그냥 같이 : 당신이 볼 수있는 그것을 생성하기 위해 5 ~ 10 초 소요 때문에ASP.NET 캐시 된 컨트롤 다시 만들기

<%@ OutputCache Duration="1200" VaryByParam="none" %> 

, 컨트롤, 매 12 분 다시 만들어집니다.

이제 ASP.NET의 기본 동작은 사용자가 페이지를 입력하고 캐시에 12 분 동안 보관할 때 컨트롤을 만드는 것입니다. 그런 다음 5 분이 지나면 사용자가 페이지를 입력하면 컨트롤이 다시 만들어집니다.

캐시가 만료 된 후 ASP.NET에서 컨트롤을 다시 만들도록 할 수있는 방법이 있습니까? 다음 사용자 방문에 상관없이?

또는 심지어 완벽한 솔루션 : 11 분 50 초라고 말한 후에 백그라운드에서 컨트롤을 다시 만들고 12 분 후에 실제 하나를 새로운 것으로 바꾸는 것보다?

도움 주셔서 감사합니다.

+1

낭비하지 않습니까? 사용자가 제어 페이지를 다시로드해야하는 이유가 없다면? 어쨌든 어떤 컨트롤이 무엇입니까, 거기에 DB 호출이 있습니까? – eugeneK

+0

예, DB를 호출하지만 DB 통신은 캐시 메커니즘에 의해 캐시됩니다. 제어 로직 자체는 많은 시간이 걸린다. 그리고이 논리를 더 이상 줄일 수있는 방법이 아닙니다. – Adam

답변

1

ASP.NET은 트리거와 함께 작동하기 때문에 Windows 예약 된 작업을 사용하여 12 분마다이 페이지를 입력하십시오. 트리거는 12 분마다 다른 페이지를 요청하는 Ajax이거나 웹 페이지로 오는 다음 사용자 일 수 있습니다.

+0

나는 그것에 대해 생각했지만 이것이이 경우 유일한 해결책 일 수 있다고 확신하지 못합니다. – Adam

+0

@Adam, 무슨 컨트롤 이요? 어쩌면 당신은 그것의 어떤 부분을 제어 할 수 없으며 Cache는 필요한 부분만을 옮길 수 있습니까? – eugeneK

+0

Unfotunately 컨트롤은 많은 컨트롤 (레이블, div)을 만들고 컨트롤 내의 다른 컨트롤에 추가합니다. 그리고 Controls.Add() 메서드를 사용하여 캐시 된 HTML을 추가하면 예외로 끝나기 때문에 컨트롤 외부에서 컨트롤을 캐시 할 수 없습니다. – Adam

0

잘 모르겠지만 사용자가 페이지를 볼 때 간격으로 비동기 적으로 업데이트되도록하려는 것 같습니다.

그렇다면 Ajax를 사용해야합니다. 예를 들어, Timer 컨트롤을 사용하면 UpdatePanels를 설정된 간격으로 비동기 적으로 업데이트 할 수 있습니다.

그런데 실제로는 20 분이 소요됩니다.

관련 문제