2013-03-09 1 views
0

나는 그 생성자를 통해 객체 C를 가져 오는 객체 B를 가지고 있습니다. 이제 C가 A의 생성자 안에 만들어지고 필드/멤버 변수로 설정됩니다. Inside A B의 여러 인스턴스를 작성하여 List에 삽입합니다. 나중에이 목록을 지우십시오 ......... C가 아직 살아 있고 A가 물론 살아 있기 때문에 제 질문은 메모리 누수가 있습니까?C# 필드 또는 멤버 변수가있는 메모리 누수

감사

+7

이것은 "부러진 다리가 있습니까?"라고 묻는 것과 같습니다. * 부르기 *. 몇 가지 코드를 보여주십시오. – Thousand

+0

[CLR Profiler] (http://www.microsoft.com/en-us/download/details.aspx?id=16273)를 사용하여 직접보십시오. 측정하려면 알아야합니다. – rene

답변

4

C#을 자동 가비지 컬렉션을 가지고, 그래서 프레임 워크는 개체 중 하나가 더 이상 사용하지 않을 때 발견하고는 사용하지 않는 개체의 메모리를 사용할 수있게됩니다.

Bs의 목록을 지울 때 C 객체도 할당 해제되는지 묻는다면 A의 속성 (필드)을 통해 참조가 남아 있으므로 내기가 발생하지 않을 것입니다.

+0

B가 메모리에서 제거되었는지 묻습니다. – Andy

+0

@Andy 개체에 네이티브 형식이 없으면 모든 개체가 GC에서 제거됩니다. –

+0

@Andy, 더 이상 참조되지 않은 모든 개체는 가비지 수집기에서 제거됩니다. 즉, 해당 Bs 목록에 대한 참조가있는 경우 할당 취소되지 않습니다. Bs 중 하나만에 대한 참조가있는 경우 참조되지 않은 모든 항목이 할당 취소됩니다. – csima