2008-09-25 7 views
29

최근에 내 응용 프로그램이 출시되지 않는 메모리를 먹는 것으로 나타났습니다. CLRProfiler로 프로파일 링을 한 후에는 Castle Windsor 컨테이너가 객체를 잡고 있음을 발견했습니다. 이러한 객체는 config xml의 lifestyle = "transient"속성으로 선언됩니다.캐슬 윈저가 일시적인 물체를 붙잡는 이유는 무엇입니까?

IWindsorContainer.Release(hangingObject)에 대한 명시적인 호출을 발견하면 참조를 삭제합니다.

이것은 일시적인 라이프 스타일 개체 인 CastleWindsor가 참조를 유지하고 누수를 효과적으로 생성 할 것이라고 기대하지는 않지만 문제가됩니다. 그것은 모든 적절한 장소에 명시적인 Release 호출을 삽입하는 것에서 다소 평범하고 오류가 발생하기 쉬운 작업이 될 것입니다.

이 문제는 본적이 있습니까? 주위를 둘러 보는 방법에 대한 제안 사항이 있습니까?

답변

20

여기에 대한 답변은 중요한 부분을 놓치고 있다고 생각합니다.이 정책은 공개 정책을 통해 구성 할 수 있습니다. 성 프로젝트 사이트 here에서 문서를 확인하십시오.

많은 경우 특히 호스팅 응용 프로그램의 수명 동안 컨테이너가 존재하고 일시적 구성 요소를 실제로 추적 할 필요가없는 경우가 많습니다 (호출 코드 또는 구성 요소가 포함 된 컨테이너에서 처리를 처리하기 때문에). 서비스)라면 릴리스 정책을 NoTrackingReleasePolicy 구현으로 설정하고 완료 할 수 있습니다.

1.0 내가 구성 요소 부담이 도입/구현 될 것으로 예상 V 성 이전 - 주입 의존성 등 이러한 문제의 일부뿐만 아니라 주위의 처분을 완화 도움이됩니다

편집 :

체크 아웃 구성 요소 부담에 대한 자세한 내용은 다음 게시물을 참조하십시오.

The Component Burden - Davy Brions

또한 구성 요소 부담은 윈저 컨테이너의 official 2.0 release에서 구현됩니다.

1

컨테이너의 개체에서 싱글 톤 또는 일시적인 라이프 스타일을 설정할 수 있습니다. 내가 이해하는 싱글 톤 객체는 응용 프로그램의 수명을 연장해야하지만,이 동작이 일시적인 객체에서도 동일하다는 점을 이해하지 못합니다!

ILifestyleManager을 구현하면 맞춤 라이프 스타일을 만들 수 있습니다. 어쩌면 ReallyTransient 라이프 스타일 유형을 만들기 위해 이것을 적절히 구현할 수 있습니다!

2

주목할 점은 캐슬 트렁크에서 수정 된 것 같습니다. r5475에서 Hammett는 MicroKernel의 기본 릴리스 정책을 LifecycledComponentsReleasePolicy으로 변경했습니다.

관련 문제