2008-10-27 5 views
2

같은 응용 프로그램 풀의 IIS 6.0, Windows Server 2003 상자에 많은 응용 프로그램 인스턴스가 설치되어 있습니다. 이들은 동일한 어셈블리를 많이 공유하며 단일 응용 프로그램에 조인 할 수 없습니다.GAC는 ASP.NET/IIS6.0 System.OutOfMemoryException을 수정합니까?

최근에 응용 프로그램의 새 인스턴스를 추가하고 ASP.NET 2.0 응용 프로그램을로드하려고 할 때 System.OutOfMemoryException을 얻었습니다.

GAC를 사용하여 일반적인 어셈블리를 저장하면이 오류가 해결됩니까 아니면 다른 응용 프로그램 풀간에 사이트를 배치해야만 해결할 수 있습니까?

답변

1

GAC에 무언가를 넣으면 DLL의 물리적 위치 만 변경되고 메모리에로드되는 내용은 변경되지 않습니다.

대부분의 사람들은 GAC를 "Microsoft가 자신의 물건을 넣는 곳"이라고 생각하는 경향이 있습니다. GAC 사용을 정당화 할 수있는 "다른 모든 사람들"이 만든 많은 응용 프로그램을 보지 못했습니다.

로드 균형 조정 솔루션에 대해 생각해보십시오. 시스템에 많은 RAM 부담을 가하고 있습니다.

+0

램이 전혀 초과되지 않습니다. 스트레스를 받고있는 응용 프로그램 풀만 인 것처럼 보입니다. 유감스럽게도 현재 RAM 사용량과 응용 프로그램 풀의 한계를 알 수있는 영역을 발견하지 못했습니다. –

1

있는지 확인이있는의 Machine.config 설정 배포 소매 = "true"로 :

<system.web> 
    <!-- 
     <deployment 
      retail = "false" [true|false] 
     /> 
    --> 
    <deployment retail="true" /> 
</system.web> 

디버그 코드는 다음 더 많은 메모리가 아닌 디버그 소요되며, 하나의 어셈블리가 아닌 페이지 당 하나에 컴파일 어셈블리로드의 메모리 오버 헤드가 줄어 듭니다.

당신이 당신의 응용 프로그램 풀의 메모리 설정이있어 확인 충분히 높게 설정하고, 당신은 또한이 processModel을 memoryLimit 설정에 대해 살펴 걸릴 수도 있습니다 : http://msdn.microsoft.com/en-us/library/7w2sway1(VS.71).aspx

을 그리고 80 % 또는 85 %를 사용해보십시오 설정 :

<processModel 
    memoryLimit="80" 
/> 
+0

processModel memoryLimit가 * all * .Net 프로세스에 적용되는지 또는 ASP.Net에만 적용되는지에 대해 누구나 의견을 개진 할 수 있습니까? – tbone

+0

"processModel"은 ASP.Net 전용입니다. http://msdn.microsoft.com/en-us/library/7w2sway1(VS.71).aspx –

0

공유 어셈블리를 GAC에 넣으면 드라이브 공간이 절약됩니다. 동일한 dll을 사용하는 20 개의 ASP 응용 프로그램이있는 경우 동일한 dll을 메모리에 더 적게로드하는 경우 일 수 있습니다. 확실하지 않습니다. 즉, OutOfMemoryErrors는 매우 큰 obeject를 메모리에로드 할 때 발생하기 쉽고, 일반적인 예는 DataSet입니다. 어셈블리는 메모리에 비해 크기가 작으며 메모리에있는 큰 데이터 세트 나 큰 xml 파일로 먹을 수 있습니다.

관련 문제