source

ASP를 유지하는 방법.AppDomain의 NET 어셈블리가 활성화되어 있습니까?

nicesource 2023. 10. 6. 21:44
반응형

ASP를 유지하는 방법.AppDomain의 NET 어셈블리가 활성화되어 있습니까?

시나리오:저는 n-Tier 엔터프라이즈 ASP를 보유하고 있습니다.웹 배포 프로젝트를 사용하여 배포된 NET 애플리케이션.모든 계층은 ASP에서 사용하는 독립적인 어셈블리를 생성합니다.NET 적용.

문제:앱을 실행할 때.배포 후 처음으로 메모리에 종속 어셈블리를 로드하는 데 많은 시간이 걸립니다.하지만 한때는 조명이 빠른 앱을 로드하기도 했습니다.앱에 액세스하는 사용자가 없는 경우 IIS는 메모리에서 어셈블리를 언로드하고 사용자가 이후 인스턴스에서 앱에 액세스하려고 하면 모든 어셈블리를 다시 로드하는 데 처음과 동일한 시간이 걸립니다.

저는 어셈블리를 메모리에 지속적으로 로드할 수 있는 해결책을 찾고 있습니다. 메모리 레지던트 쪽으로 어셈블리의 변동성을 무시하고 메모리에 계속 로드할 수 있는 방법을 찾고 있습니다.

또는 내 사용자들이 위의 문제를 해결하는 앱을 즐겁게 사용할 수 있는 다른 솔루션.

IIS 6에서 Application Pools 섹션으로 이동하여 ASP를 호스팅하는 풀에서 Properties를 마우스 오른쪽 버튼으로 클릭합니다.해당 NET 응용 프로그램입니다.성능 탭으로 이동하여 "유휴 후 작업자 프로세스 종료:"의 선택을 취소합니다.

IIS 7에서 연결 창으로 이동하여 응용 프로그램 풀을 찾은 다음 응용 프로그램을 호스팅하는 풀의 고급 설정을 선택합니다."Idle Timeout" 속성을 찾아서 "0"으로 설정합니다(이 속성은 비활성화됩니다).

기본값은 20분 동안 비활성 상태입니다.확인란의 선택을 취소하면, 일단 작업자 프로세스에 의해 AppDomain이 로드되면(물론 프로세스를 종료하지 않는 한) 절대 죽지 않습니다.기본적으로 IIS는 메모리 캡과 같은 일부 제한에 도달하면 프로세스를 재활용하지만, 새 요청을 시작하고 이전 요청이 사용되지 않을 때까지 모든 수신 요청을 "단계적으로" 처리하여 중단을 최소화합니다.

당신의 ASP를 유지할 작은 c# 클래스도 작성했습니다.일반적인 상황에서 NET 애플리케이션이 활성화(대체 아카이브 버전)됩니다.애플리케이션 내에서 실행되기 때문에 IIS나 다른 어떤 것이 프로세스를 명시적으로 중단하는 것을 막을 수는 없지만 애플리케이션을 "핫"하게 유지합니다. 예를 들어 IIS가 종료를 결정할 때까지 앱이 충분히 오래 유휴 상태가 되지 않습니다.

IIS 구성(예: 공유 호스트)을 직접 제어할 수 없는 경우에는 애플리케이션 풀의 시간 초과를 방지하기 위해 별도의 시스템(예: 상시 작동 워크스테이션)에서 작은 애플리케이션을 실행하는 것이 좋습니다.화려한 것은 없습니다. 간단한 WebRequest와 콘솔 응용프로그램의 약간의 루프가 필요합니다.

ASP.net의 장점 중 하나는 정적(공유) 개체 인스턴스를 만들 수 있다는 것입니다.

외부 프로세스의 필요성을 방지하기 위해 간단한 WebRequest를 사용하여 도메인의 페이지를 호출하는 정적 타이머를 global.asax에 만들 수 있습니다.이런 식으로 풀의 수동 리셋이 완료될 때까지 사이트는 스스로 살아 있습니다.

윈도우 작업 스케줄러를 통해 10분마다 4개의 사이트를 유지하는 작은 C# 콘솔 애플리케이션을 작성했습니다.인생은 다시 한번 좋습니다.우리는 새벽 2시부터 5시까지 앱을 실행하지 않습니다. 단지 서비스가 문제가 되더라도 메모리를 정리할 수 있도록 말입니다.저희 사이트의 경우, 어쨌든 그 시간대에는 사람이 거의 없습니다.

언급URL : https://stackoverflow.com/questions/838318/how-to-keep-asp-net-assemblies-in-appdomain-alive

반응형