캐시와의 상호 작용을 용이하게하기 위해 CacheHelper 클래스가 있습니다. static int 필드를 사용하여 캐시 시간 제한을 지정하려고합니다. 이 필드는 초기에 const 기본값으로 설정되어 있지만 응용 프로그램이 기본 시간 초과 값을 변경하는 방법을 제공하려고합니다.고정 값 유형 멤버를 수정하기위한 잠금. 그게 필요 할까?
정적 값 유형을 수정할 때 잠글 필요가 있습니까? 세터의 자물쇠가 필요합니까? 여기서 볼 수있는 다른 문제가 있습니까? 미안하지만, 나는 여전히 멀티 스레딩에 관해서는 꽤 바보 같아.
감사합니다.
public static class CacheHelper
{
private static object _SyncRoot;
private static int _TimeoutInMinutes = CacheDefaults.TimeoutInMinutes;
public static int TimeoutInMinutes
{
get
{
return _TimeoutInMinutes;
}
set
{
lock (_SyncRoot)
{
if (_TimeoutInMinutes != value)
{
_TimeoutInMinutes = value;
}
}
}
}
public static void Insert(string key, Object data)
{
if (HttpContext.Current != null && data != null)
{
HttpContext.Current.Cache.Insert(key, data, null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(CacheHelper.TimeoutInMinutes));
}
}
}
휘발성과 잠금 장치를 결합해도 괜찮습니까? 시간 초과 값은 많이 읽지 만 드물게 작성됩니다 (Global.asax의 코드에 의한 응용 프로그램 시작시 이외의 경우). – mikesigs
@whatispunk : 음, 아무런 해를 끼치 지는 않겠지 만 많은 도움이되지는 않습니다. 왜 둘 다 사용 하시겠습니까? 휘발성은 int 형의 경우에 충분합니다 ... –
당신의 도움에 감사드립니다. 나는이 모든 것이 의미하는 바를 머리 속에 싸기 위해 노력하고 있습니다. 휘발성의 사용에 대한 다양한 의견이있는 것 같고 그 뒤에있는 대부분의 용어 (예 : 다중 CPU 및 명령 순서 등)조차도 이해할 수 없습니다. 멀티 스레딩에 대해 읽을 시간이 필요합니다. – mikesigs