2013-12-19 3 views
8

응용 프로그램 (콘솔/창)과 관련하여 정적 변수의 수명을 이해하고 있지만 웹 응용 프로그램 (asp.net, MVC, 웹 API 등).정적 변수 수명 및 응용 프로그램 풀 다시 작성

내가 이해하는대로, IIS는 응용 프로그램 풀을 재활용 할 때 정적 변수가 해당 유형의 기본값 (integals = 0, 참조 유형 = null 등)으로 재설정되지만 인라인 초기화 프로그램이 다시 초기화되면 궁금해집니다. 관계없이 유형을 기본값으로 재활용하거나 재활용합니까?

실시 예 (들) : 상기에서

// example 1 
static class StaticRandom 
{ 
    private static Random rng = new Random(); 
} 

는 정적 필드 RNG 새로운 랜덤 재 초기화 될 것이다() 재활용 후 처음으로 호출되면? 내가 좋아 다시 초기화 될 때까지 IIS 재활용 후, 예 1의 RNG 변수가 널 (null)이 될 것이라고 가정에서 수정

// example 2 
static class StaticRandom 
{ 
    private static Random rng = null; 

    public static Next() 
    { 
     if (rng == null) 
      rng = new Random(); 
     return rng.Next(); 
    } 
} 

오전 : 또는이 같은 변수를 사용하기 전에 널 (null) 검사를 구현해야 할 예제 2에서?

참고 : 위 예제의 스레드 안전성 문제를 완전히 알고 있습니다. 제 질문에 대한 간단한 예제 일뿐입니다. 위의 아이디어의 실제 시나리오에서 적절한 잠금 패턴을 구현했습니다.

+0

이것은 스스로 힘들어하지는 않을 것입니다. 예제 1의 '다음'메소드에 중단 점을 넣고 재활용 후에'rng' 값을 얻었는지 확인하십시오. –

+1

리사이클 롤에 들어가기를 기다리는 동안 내 로컬 서버를로드하고 15 분 동안 내 엄지 손가락을 움직이기보다는 명확한 설명을 요청하는 것이 훨씬 쉽다는 것을 알았습니다. 게다가, 때로는 사람들은 잘 알고있는 작은 잡았다를 명심해야한다. –

+4

"재활용 대기": IIS를 열고 응용 프로그램 풀을 직접 재활용 하시겠습니까? –

답변

5

좋아, 그래서 자신을 도울 수 없어, 빠른 테스트를 했어. 정적 초기화 인라인으로 재설정됩니다 -

그것은 내가 무슨 생각을 확인

, 그래서이 프로세스에 연결하지 않고 그것을 할 수있는 페이지 출력 제외하고, 귀하의 예제 1에 따라 꽤 많이했다 값.