2011-08-26 3 views
5

ASP.NET 응용 프로그램에서 실제로 메모리 문제가 발생했습니다. 마치 페이지가로드 될 때마다 페이지의 이전 이전 인스턴스가 메모리에서 제거되지 않는 것처럼 보입니다. F5 키를 10 번 누르면 메모리가 인스턴스에 10-20MB를 추가합니다. 스트레스 및 성능 테스트를하는 동안 메모리가 최대치가되고 웹 서버가 다운됩니다 ...ASP.NET 페이지가 메모리에서 제거되지 않았습니다.

ANTS 메모리 프로파일 링을 실행하고 페이지가로드 될 때마다 이전 인스턴스가 메모리에 남아 있음을 확인했습니다. 모든 ASP.NET 웹 페이지는 마스터 페이지도 사용합니다. 내가 페이지를

http://oi51.tinypic.com/21msy2g.jpg

는 개미 프로파일 결과를 보면 다음 10 배, 페이지가 존재하는 웹의 10 개 인스턴스뿐만 아니라 마스터 페이지의 10 개 인스턴스를 ...로드하는 경우 다시 말하지만, 당신은 볼 수 있습니다 모든 페이지를 새로 고침하면 약 320Kb가 메모리에 추가되고, 웹 페이지뿐이기 때문에 마스터 페이지를 고려하지 않습니다. 내 응용 프로그램은 응용 프로그램을 캡처하는 생명 보험 응용 프로그램이므로 30-40 페이지 정도 진행됩니다. 왜 이것이 이것이 방대한 프로빙인지를 알 수 있습니다.

페이지를 메모리에 보관하는 방법을 찾는 방법은 무엇입니까? \

모든 내 페이지는 서비스 등록을 위해 Unity 및 Dependency Injection을 사용합니다 ... page_onUnload 중에이 서비스를 등록 해제해야하는지 잘 모르겠습니다.

편집

좋아는, 나는 아래로 문제를 추적 관리했습니다. 페이지가 삭제되지 않은 이유는 (GCollected) 페이지를 언로드하는 동안 등록되어 있지만 아직 등록되지 않은 Unity 서비스 인스턴스 때문입니다. 내 페이지에 유니티를 사용하고 방법이다 : 나는 공용 속성을 통해 서비스를 주입

#region Services 

    [Dependency] 
    public ReviewReportService SummaryService { get; set; } 

    [Dependency] 
    public Portfolios.PortfolioService PortfolioService { get; set; } 

    #endregion 

다음 페이지 초기화, 나는 유니티 증강 수행 분명히 할 때 이제

protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 

        ApplicationContainer.BuildUp(this.Context, this); 
      } 

을 페이지는 정상적인 라이프 사이클을 거치며 Unload를 호출합니다. 의존성 삽입 참조로 인해 언로드 할 수 없습니다 ... 서비스 등록 해제 방법 (SummaryService, PortfolioService)

OnUnload에서 다음 호출을 시도했지만 아무것도 수행하지 않습니다.

ApplicationContainer.GetContainer (Context) .Tardown (this);

답변

0

정적 단어 (C 번호) 또는 공유 (VB)에 대한 검색을 수행 LifeTimeManager입니다.페이지가 상승 할 때마다 기본적으로 새 컨테이너를 반환하는 다른 단일 LifeTimeManager를 사용해야했습니다. 페이지의로드가 해제되면 컨테이너에서 티 아웃이 호출되고 삭제됩니다. 이로 인해 삽입 된 속성에 대한 모든 링크가 해제됩니다. 이것은 내 문제를 해결했습니다 :)

1

페이지에 대한 정적 참조가 있으며 처분 할 수 없습니다.

+1

페이지에 대한 정적 참조가 있는지 어떻게 결정합니까? 어떤 객체가 객체를 참조하는지 식별하는 방법은 무엇입니까? – FaNIX

0

나는 서비스를 등록 해제함으로써 확실히 시작할 것입니다. 이 문제로 인해 대량의 메모리 누수가 발생했습니다 (단 한 건 그런 예에서는 사용되지 않았습니다).

또한 페이지 변수를 가비지 수집에서 제외시키는 방식으로 페이지 변수를 사용하고 있는지 확인하십시오. 정적 colletion 페이지/마스터 페이지 의 아무 곳이나 존재하는 경우 내가 확인 할

0

그냥 문제가 UNITY에 의해 발생 된 전체 프로젝트

관련 문제