Global.asax에서 Application_Start와 Init를 언제 사용합니까?


79

나는에서 응용 프로그램 초기화 코드를 넣어해야 어떤 상황 나는 아래를 궁금 Application_Start()Init()내에서 Global.asax파일?

둘 사이의 차이는 다른 것보다 나에게 매우 분명하지 않는 것 같습니다 Application_start다음, 먼저 호출됩니다 Init().

  • 왜 다른 하나를 사용합니까?
  • 정말 차이가 있습니까?
  • 두 이벤트간에 애플리케이션 상태가 어떻게 변경됩니까?

지금까지 내가 찾을 수있는 유일한 실제 포인터 IHttpModuleInit()메서드 만 있다는 것입니다 . 따라서 내가하는 일이 어느 시점에서 구현하기에 더 적합 할 수 있다면 일관성을 위해 다른 것이 없다면 IHttpModuleInit()메서드를 사용해야합니다 Global.asax.

답변:


89

로부터 MSDN의 문서 :

Application_Start 및 Application_End 메서드는 HttpApplication 이벤트를 나타내지 않는 특수 메서드입니다. ASP.NET 은 각 HttpApplication 인스턴스가 아니라 응용 프로그램 도메인의 수명 동안 한 번 호출합니다 .

초기화 :

모든 모듈이 생성 된 후 HttpApplication 클래스 의 모든 인스턴스에 대해 한 번 호출 됩니다.

업데이트 : 특정 코드가 앱에서 한 번만 호출되는지 확인해야하는 경우. 수명주기, Application_Start가 더 나은 솔루션입니다. 예 : log4net 구성?


4
후속 질문 : HttpApplication의 인스턴스는 언제 생성됩니까? 작업자 프로세스가 다시 시작될 때마다 각 작업자 스레드에 대해 하나의 인스턴스가 포함될 것이라고 가정하고 있습니다.
roryf 2009

2
@roryf-asp.net은 재사용 할 수있는 애플리케이션 인스턴스 풀을 유지합니다. 내부적으로 요청은 CLR 스레드 풀을 사용하여 서비스되며 들어오는 요청은 특정 임계 값을 초과하여 대기됩니다. 대부분의 사이트에서 그런 종류의 트래픽을 보지 못하기 때문에 응용 프로그램 인스턴스 풀을 해당 임계 값 수준으로 초기화하지 않습니다. 적은 수의 인스턴스로 풀을 만든 다음 수요가 증가함에 따라 풀의 크기를 늘리는 것 같습니다.
Joel Fillmore

12

그들 사이에는 차이점이 있습니다. Application_Start () 이벤트는 한 번만 호출되는 반면 Init () 메서드는 응용 프로그램의 인스턴스가 생성 될 때마다 호출됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.