실적이 좋지 않아 약간의 최적화가 필요한 기존 웹 사이트가 있습니다. Linq to SQL을 데이터 레이어로 사용하고 MVP 패턴을 UI 패턴으로 사용하는 asp.net 쇼핑 웹 사이트입니다.캐시 데이터가 변경 될 때까지
db에서 가장 값 비싼 엔터티는 일대 다 관계가있는 제품 및 범주 테이블입니다. 이 두 엔티티는 admin 그룹의 사용자가 제품이나 카테고리를 추가하기로 결정하지 않는 한 정기적으로 변경되지 않을 수 있습니다 ... 각 요청마다이 두 엔티티의 모든 것을 생성하고 가져 오는 것이 리소스 비용이 많이 드는 지 궁금합니다! 그래서 내 데이터를 보존 할 수있는 방법이 있다면 ...
먼저 데이터 검색에 AJAX를 사용하여 쿼리하거나 바인딩해야하는 엔티티 만 만들겠다고 생각했지만 어떻게해야합니까? 새 DataContext 인스턴스를 만들지 않고 그렇게 할 수 있습니까? !! 반면에 전체 DataContext에 대해 캐시를 사용하는 것은 메모리 비용 때문에 잘못된 결정으로 간주됩니다. 그러면 여기서 가장 좋은 옵션은 무엇입니까? 어떻게 개선 할 수 있습니까?
1) @HatSoft 제안하는 일을 UPDATE.
단점 : 이러한 접근 방식은 데이터베이스에만 도움이됩니다. 이 옆에는 메모리 문제가있을 수 있습니다. 렌더링 된 HTML 대신 메모리에 데이터를 넣고 있기 때문입니다. 그러나 이것은 디 커플 링과 관련하여 최상의 옵션 일 수 있습니다.
string pagePath = Context.Request.Url.AbsolutePath;
object cacheKey = application[pagePath];
if(cacheKey == null)
return; //application restarted/first run so cache the stuff
else
Context.Response.RemoveOutputCacheItem(pagePath);
단점 : 출력 캐싱을 사용
2) 우리는 *에서 .aspx 와일드 카드 HTTP 처리기에서이 코드가 지금 우리는 페이지를 사용하는 각 데이터베이스 개체에 pagePath를 연결해야합니다,하지만 내가 그렇게한다면, 나는 그것들을 결합 해제하는 대신에 물건들을 연결시키고 있습니다. 이 접근법은 또한 약간의 하드 코딩을 실행합니다.
3) 다른 솔루션은 제어 캐시 모드 대신 포스트 캐시 모드에서 캐싱을 출력합니다. Subsituation 요소를 사용하고 OutPutCache Duration을 86400으로 설정하면 페이지가 24 시간마다 다시 생성됩니다.
단점 : 하위 구성 요소에 대한 html 출력을 동적으로 생성하는 사용자 정의 컨트롤을 동적으로 코딩합니다.
그래서 무엇을 제안합니까?
내 업데이트를 확인하십시오. – jim