2010-01-23 8 views
2

asp.net 페이지에 개체 목록이 있습니다. 페이지가 브라우저에서 처음으로로드되면 데이터베이스에서 데이터를 가져 와서 해당 데이터로 개체를 만들고 목록을 채 웁니다. 이 모든 것은 페이지로드 이벤트 핸들러 내에서 수행됩니다. 이제 페이지가 페이지에 다시 게시 될 때 변수가 모두 해제 되었기 때문에 이전 목록은 사라졌습니다.ASP.NET의 개체 목록을 캐시하는 방법

어떻게이 페이지를 게시하면 내 모든 개체를 사용할 수 있도록 해당 목록을 캐시 할 수 있습니까?

+0

데이터가 사용자에게 관련되어 있습니까? 또는 모든 사용자가 공유합니까? – Eilon

+0

@Elion 이 데이터는 모든 사용자가 공유합니다. –

답변

4

@ 엘론이 물었던 것처럼,이 데이터는 사용자마다 다르며 사이트마다 다릅니 까?

데이터가 사용자별로 다르면 세션 상태를 사용하여 저장할 수 있지만 사용자 세션이 끝나면 만료되며 경우에 따라 데이터베이스 서버에 대한 왕복 이동을 호출 할 수도 있습니다 (예를 들어 백업 된 경우 in-proc가 아닌 SQL 서버 등).

데이터가 응용 프로그램 과이드 인 경우 Application Cache을 사용할 수도 있습니다. 이는 사이트 전체에 적용되며 프로세스 도메인에 상주하므로 해당 서버에 세션이있는 모든 사용자가 사용할 수 있습니다. 다중 서버 시나리오에서 이것을 사용할 때는 특별한주의가 필요하지만 쉽게 수행 할 수 있습니다.

애플리케이션 캐시 (및 다른 모든 글로벌 설정)는 설정에 시간이 걸리면 첫 번째 사용자가 사이트에 접속하는 속도가 느려질 수 있습니다. IIS7과 ASP.NET은 최근에 출시 된 모듈을 사용하여 주기적으로 응용 프로그램을 가동시켜 전역 캐시가 미리 채워지거나 살아 있는지 확인합니다.

1

HttpContext.Current.Session을 사용하십시오.

+2

세션 상태는 일반 항목을 캐싱하지 않습니다. – Eilon

3

Cache.Add(key_name, list_object, ...)을 사용하여 목록을 저장 한 다음 Cache[key_name]을 사용하여 검색합니다 (검색된 개체를 적절한 유형으로 캐스팅해야 함). Add 메서드에는 캐시 된 개체가 만료되는지 여부와 시간을 지정할 수있는 몇 가지 매개 변수가 더 있습니다.

Cache 개체는 실제로 System.Web.Caching.Cache이며 aspx 페이지 또는 HttpContext.Current.Cache에서 액세스 할 수 있습니다.

3

이 페이지에만 관련성이있는 경우 ViewState를 사용합니다. 설정 : 구문은 전에 sessionState의를 사용하는 경우 익숙한

ViewState["Persons"] = new List<Person>(); 

이 viewstate가 데이터는이 페이지에 대한 유지

List<Person> persons = ViewState["Persons"] as List<Person>; 

읽을 수 있지만 (직렬화) 텍스트로 전송됩니다 귀하의 페이지는 매우 큰 다운로드가 될 것이므로 1000 명을 위해 사용하지 마십시오. 많은 양의 데이터가있는 경우 캐시 개체를 사용하는 것이 좋습니다. 그러나 웹 팜에 있지 않은 경우에만 데이터를 더 이상 필요로하지 않고 캐시를 사용하여 데이터를 한 번만 지우는 것이 좋습니다 사용자 당 데이터 인 경우 사용자 당 키. 마지막으로 세션 상태를 사용할 수 있습니다. 사용자 별 저장소이지만 더 이상 데이터가 필요하지 않은 경우 데이터를 한 번만 지워야합니다.

상황에 따라 선택할 수있는 항목이 많습니다.

미셸

GrayWizard의 대답에 추가하려면
+1

목록 크기 고려 사항 외에도 viewstate에 저장하기 위해 개체를 직렬화 할 수 있어야합니다. –

1

, 당신은 너무 viewstate가를 사용할 수 있지만이 포스트 백에 포함되어 있기 때문에, 당신은 공간을 많이 차지하거나하지 이후 보안 할 필요가 뭔가를 지속하지 않는 확인 기본적으로 암호화 됨.

개요는 다음과 같습니다. 날짜는 있지만 관련성이 있습니다.

http://msdn.microsoft.com/en-us/magazine/cc300437.aspx

관련 문제