만료 기간이있는 HttpContext.Current.Cache
으로 지정하는 것이 좋습니다. 그런 다음이 데이터는 캐시에서 만료되면 제거되고 실제 최신 데이터를 다시로드 할 수 있습니다. 이 경우 정적 목록보다 데이터의 실제가 더 좋습니다.
당신은 코드를 작성할 수 있습니다 그럼 당신이 부동산에 처음으로 액세스하는 경우
public static List<string> SwearWords
{
get
{
List<string> items = HttpContext.Current.Cache["SwearWords"] as List<string>()
if (items == null)
{
items = LoadThemFromDB();
HttpContext.Current.Cache.Insert("SwearWords",
items,
null,
DateTime.Now.AddMinutes(10),
Cache.NoSlidingExpiration);
}
return items;
}
}
를 - 그것은 10 분 동안 DB 및 캐시에서 그들을로드합니다. 10 분 후에 캐시에서 제거되고 이후에 다시 액세스되는 경우 최신 데이터를로드하고 다시 캐시합니다.
정적 목록의 경우 DB에서 SwearWords가 업데이트되는 경우 수동으로 플러시/업데이트해야합니다.
IIS는 20 분 동안 사용하지 않으면 응용 프로그램 풀을 중지한다는 것을 기억해야합니다. 20 분 동안 사용자가 없으면 자동으로 다시 시작됩니다. 그리고 정적 목록 \이 캐시는 마르쿠스 코멘트 얹는 응용 프로그램 도메인
에서 삭제됩니다 - 여기가 하나 개 이상의 쓰레드에 의해 호출 될 경우 경우에 LoadThemFromDB
의 중복 호출을 피할 더블 체크와 같은 샘플입니다 동시에 :
private static readonly object _swearWordsLockObj = new object();
public static List<string> SwearWords
{
get
{
List<string> items = HttpContext.Current.Cache["SwearWords"] as List<string>()
if (items == null)
{
lock(_swearWordsLockObj)
{
items = HttpContext.Current.Cache["SwearWords"] as List<string>()
if (items == null)
{
items = LoadThemFromDB();
HttpContext.Current.Cache.Insert("SwearWords",
items,
null,
DateTime.Now.AddMinutes(10),
Cache.NoSlidingExpiration);
}
}
}
return items;
}
}
더블라는 이름의이 코드
는 잠금 확인 - 단어를 맹세의 목록있는 한
http://en.wikipedia.org/wiki/Double-checked_locking
응용 프로그램 풀이 다시 시작되거나 재활용 될 때까지 데이터가 고쳐지지 않는지 정말로 신경 쓰지 않는다면 접근 방식은 잘 작동합니다. 광범위한 설명을 위해 –