2009-05-15 2 views
3

메모리 누수가있는 큰 .NET C# 응용 프로그램이 있습니다. 개미 메모리 프로파일 러를 사용하면 여러 버전의 동일한 사용자 컨트롤이 메모리에 있고 가비지 수집기가 수집하지 않는 것을 볼 수 있습니다. 웹 양식에는 출력 캐싱이 있지만 실제 사용자 컨트롤에는 출력 캐싱이 없습니다.사용자 컨트롤이 Gargabe Collector에서 수집되지 않는 이유는 무엇입니까?

사용자 컨트롤이 삭제되지 않는 이유가 있습니까?

가비지 컬렉터가 왜 그 이유를 파악할 수 있습니까?

답변

0

기본적으로 객체가 수집되지 않습니다. 참조를 보유하고있는 사람을 찾아보십시오. ANTS Profiler 또는 .NET Memory Profiler (SciTech)는 좋은 통찰력을 제공합니다.

1

사용자 정의 컨트롤이 가비지 수집되지 않는 데에는 많은 이유가 있습니다. 코드 자체를 살펴보면 실제로 처분하지 않는 IDisposable을 구현하는 객체 (예 : 레코드 세트)를 인스턴스화하고 있습니까?

0

페이지에서 출력 캐싱을 사용하도록 설정하면 모든 하위 컨트롤도 캐시됩니다. 메모리에 저장되어있는 컨트롤의 인스턴스가 여러 개인 경우이 페이지에 부분 페이지 캐싱을 사용하여 메모리 절약에 도움이되는 몇 가지 전략을 제공하십시오. 누군가가 적어도 하나의 참조를 보유하는 경우

http://msdn.microsoft.com/en-us/library/k4he1ds5(VS.71).aspx

관련 문제