2008-09-01 6 views
37

정확히 Appdomain 재활용 무엇인지 알아 내려고하고 있습니까? DotNet 응용 프로그램에서 aspx 페이지가 처음 요청되면 해당 응용 프로그램의 appdomain이 만들어지고 필요한 어셈블리가 해당 appdomain에로드되고 요청이 제공된다는 것을 알고 있습니다. 이제 web.config 파일이나 bin 폴더의 내용 등이 수정되면 appdomain은 "recycled"됩니다. 제 질문은 재활용 과정이 끝나면 appdomain에 어셈블리가로드되어 다음 요청을 처리 할 준비가 되셨습니까? 또는로드 할 어셈블리를 트리거하려면 페이지를 요청해야합니다.정확히 무엇입니까 Appdomain 재활용

답변

60

글쎄, 스레드가 최종 결론으로 ​​원활하게 가고 있다고 생각하지만, 결국에는 그렇지 않습니다.

저는 다른 웹 사이트에서 방금 읽은 것을 이해하고이를 활용하여 질문에 대답하려고 노력할 것입니다.

우선 내가 혼란스럽게 할 수 있으므로 응용 프로그램 풀 이외의 용어는 재활용하지 않도록 노력하고 있습니다.이제 프로세스, 풀 및 AppDomain으로 이동하면 그림이 다음과 같이 표시됩니다.

응용 프로그램 풀은 간단히 말해서 W3WP.exe라고하는 프로세스에 의해 유지 관리되는 메모리 영역입니다. . 응용 프로그램 풀을 재활용한다는 것은 해당 프로세스를 중단시키고 메모리에서 제거한 다음 새로 할당 된 프로세스 ID로 새로운 작업자 프로세스를 시작한다는 것을 의미합니다.

응용 프로그램 도메인에 대해서는 컨테이너의 역할을하는 앞서 언급 한 영역 내에서 메모리 영역의 하위 집합으로 간주됩니다. 즉, 메모리 W3WP.exe의 프로세스는 응용 프로그램 도메인이라는 하위 집합 영역을 저장하는 응용 프로그램의 매크로 메모리 영역입니다. 즉, 메모리에있는 하나의 프로세스는 지정된 응용 프로그램 풀 내에서 실행되도록 할당 된 각 응용 프로그램마다 하나씩 다른 응용 프로그램 도메인을 저장할 수 있습니다.

재활용에 관해서는 처음에 말했듯이, 나 자신이 응용 프로그램 풀에만 예약 한 것입니다. AppDomains의 오해를 피하기 위해 'restart'이라는 용어를 사용하는 것을 선호합니다. 이를 기반으로 AppDomain을 다시 시작하면 새로 추가 된 설정 (예 : 기존 구성 새로 고침)을 사용하여 특정 응용 프로그램을 시작하는 것을 의미합니다. 이는 AppDomain이라는 메모리 하위 영역 경계 내에서 발생하며 궁극적으로 해당 응용 프로그램 풀과 관련된 프로세스 내에 있습니다. 그 새 설정 파일에서 같은

의 web.config, 은 Machine.config, Global.asax에, bin 디렉토리 을 App_Code,

로 올 수 있으며, 다른 사람이있을 수 있습니다.

AppDomain은 서로 분리되어있어 합리적입니다. 그렇지 않은 경우 web.config가 변경되면 응용 프로그램 1에서 풀 재활용 요청을 받았고 해당 풀에 할당 된 다른 모든 응용 프로그램이 다시 시작될 것입니다. Microsoft와 다른 누구도 분명히 원하지 않는 내용이었습니다. 내 포인트를 요약

,

  • 처리 (W3WP.EXE)
    • 의 AppDomain 1
    • 의 AppDomain 2
    • 의 AppDomain 3
    • 의 AppDomain N

N = 주어진 W3WP.EXE에 의해 관리되는 응용 프로그램 풀에 할당 출원 건수

  • 프로세스의 메모리 영역 내에서, 다른
  • 프로그램 도메인은 보조 메모리 영역이 서로 분리되어 하나의 격리되어 동일한 프로세스
  • IIS 설정을 변경하면 응용 프로그램 풀 재활용이 필요할 수 있습니다 (W3WP의 새 작업자 프로세스 종료 및 시작).EXE)
  • 응용 프로그램 전체의 설정이 응용 프로그램 도메인의 우려를 변경하고 그들이 자세한 내용은

위의 개요와 같은 것들과 같은 일부 특정 파일의 변경 후 다시 시작받을 수 있습니다, 내가 추천 :

http://blogs.msdn.com/b/david.wang/archive/2006/03/12/thoughts-on-iis-configuration-changes-and-when-it-takes-effect.aspx

What causes an application pool in IIS to recycle?

http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

,536,

브라질에서 감사합니다!

7

이 한 번 봐 - 그 그것을 설명 할 수 있습니다

http://weblogs.asp.net/owscott/archive/2006/02/21/ASP.NET-v2.0-2D00-AppDomain-recycles_2C00_-more-common-than-before.aspx#440333

을 일반적으로. ASP.NET 웹 사이트에서 "첫 번째 히트"라고하는 것은 일반적으로 컴파일 및 AppDomain의 생성으로 인해 시간이 오래 걸립니다.

사이트를 배포 할 때마다 Visual Studio에서 "웹 사이트 게시"기능을 사용하여 웹 사이트를 미리 컴파일해야합니다. 그런 다음 "첫 번째 히트"패널티가 감소합니다. 디버깅이 아닌 Release로 구성을 설정하십시오!

+0

(+1) 링크를 제공해 주셔서 감사합니다. 이 기사에서 테스 (Tess)의 게시물에 대한 링크가 있습니다. –

1

"업데이트 가능"인 페이지는 사용하기 전에 컴파일해야합니다. 즉, 첫 번째 요청에서 어셈블리가로드되고 컴파일되며 액세스 준비가되었음을 의미합니다. 이러한 파일이 변경 될 때마다 (일부 바이러스 소프트웨어조차도 파일의 수정 날짜를 변경하여이를 트리거 할 수 있습니다!) appdomain은 재활용됩니다.

웹 응용 프로그램을 업데이트 할 수 없도록 구성 할 수 있습니다. 모든 것이 DLL로 컴파일되고 가상 디렉터리에 .ASPX 또는 .CS 파일이 표시되지 않습니다. 코드를 업데이트하기가 어려워지며 (웹 페이지에 몇 가지 추가 텍스트를 넣어야합니까? 다시 컴파일해야합니다!), 웹 응용 프로그램의 가용성이 향상됩니다.

그러나 여전히 파일을 변경하면 웹 앱이 재활용되지 않습니다. 예를 들어 web.config를 편집하면 appdomain은 컴파일 된 경우에도 재생됩니다.

2

재활용은 appdomain을 호스팅하는 프로세스를 종료합니다. 재활용 할 때 PID가 변경됨을 알 수 있습니다.

AppDomin을 언로드하면 AppDomain에있는 모든 어셈블리가 언로드되고 다시 사용할 수 있습니다.

기억해야 할 점은 일단 CLR이 프로세스로로드되면 제거 할 수 없다는 것입니다. 따라서 CLR이로드되는 즉시 작업을 수행해야한다면 CLR이 다시로드되지 않으므로 AppDomain을 언로드하면 도움이되지 않습니다.

또한 IIS가 AppDomain을 호스팅 할 수있는 유일한 프로세스가 아닙니다. 모든 프로세스가 할 수 있으며 어셈블리를 언로드하기 위해 전체 프로세스를 항상 죽이고 싶지는 않습니다.