공유 호스팅 시스템에 ASP.Net 4.0 웹 사이트가 있습니다. 응용 프로그램은 20 분 동안 사용하지 않으면 재활용됩니다.공유 호스트 환경에서 어떤 시스템 구성 또는 오작동이 읽기 전용 정적 변수를 null로 만들 수 있습니까?
내 응용 프로그램에서 일부 정적 변수는 application_start에서 초기화됩니다.
다음 요청이 들어 오면 응용 프로그램을 다시 시작하고 application_start를 실행하고 정적 변수를 재설정해야합니다.
비활성 기간이 지나면 정적 변수에 의존하는 페이지에 액세스 할 때 null이고 오류가 발생합니다.
이러한 변수는 application_start에서 초기화되기 때문에 응용 프로그램을 다시 시작하면 초기화되지 않으므로 비활성 기간 이후에는 null이됩니다.
실제로 null 참조 오류가 표시되면 응용 프로그램 풀을 재활용하고 application_start를 실행하면 다음에 응용 프로그램을 메모리에서 삭제할 때까지 문제가 해결됩니다.
응용 프로그램이 단순히 재활용되는 경우 application_start에서 정적 변수를 다시 초기화하면 아무런 이유가 없으므로 메모리에서 응용 프로그램을 제거 할 때 다른 유형의 시스템 메모리 문제가 발생하는지 궁금합니다. 정체가 null 인 경우
정적 변수는 가비지 수집되지 않으므로 초기화 후에 null이 될 수 없습니다.
개발자 시스템에서는 오류가 발생하지 않으며 공유 호스팅 시스템에서만 발생합니다. application_start에서 초기화 된 정적 변수의 다른 원인은 무엇입니까?
변수를 다시 설정하는 코드가 없습니다. get 메소드를 통해서만 액세스를 포함하는 개인 필드입니다.
코드 :
비 활동 기간이 충족private static List<State> stateList;
public static void LoadStaticCache()
{
var service = DependencyResolver.Current.GetService<ILocationService>();
stateList = service.GetAllStates().ToList();
}
public static List<State> GetStates()
{
return stateList;
}
의 stateList에 액세스 할 때 다음에, 그것은 null입니다.
그러나 항상 application_start에서 초기화됩니다. 시스템 문제가 아니면 어떻게 null이 될 수 있습니까?
protected void Application_Start()
{
StaticCache.LoadStaticCache();
}
응용 프로그램 풀 재활용은 100 % 시간 문제를 해결합니다.
공유 호스팅 시스템에 IIS의 어떤 버전을 실행? 버전 7.0 (통합 모드에서)부터는 Application_Start가 약간 다르게 동작합니다. – Dubs
이 관련 질문은 도움이 될 수 있습니다 : http : // stackoverflow.com/questions/5261680/lifespan-of-net-public-static-variables 및이 http://forums.asp.net/t/1429625.aspx/1 – Dubs
한 번 더 : http://stackoverflow.com/questions/5661202/static-field-in-asp-net-mvc – Dubs