2011-01-12 4 views
1

이 패턴을 사용하는 프로젝트에서 일하고 있습니다.변수에 할당되지 않은 객체의 가비지 수집

var businessEntity = new DAL().GetObject(id); 
// do something with the business entity. 

이 패턴을 따르는 사람이 있습니까?

이로 인해 메모리 관리 문제가 발생합니까? 가비지 컬렉터와 관련된 모든 합병증?

감사

답변

2

잘 작동합니다. 그것은 잘 수집 된 garbaged 것입니다. 구현 및 객체에 따라, 줄 끝에서 수집을 위해 표시되거나 businessEntity이 범위를 벗어나면됩니다.

+0

'businessEntity'는 명명되지 않은 객체 인'DAS'에 대한 참조를 가질 수 없기 때문에 사실이 아닙니다. 가비지 컬렉터의 "범위를 벗어난"개념은 오해의 소지가 있으며 잠재적으로 잘못되었습니다. 예를 들어 http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10/10048150.aspx를 참조하십시오. –

0

는 아니, GC는 결국 DAL 객체를 삭제합니다. businessEntity 개체에 대한 참조가 있으므로 참조가 무효화 될 때까지 GC가 해당 개체를 건드리지 않습니다. 그 businessEntry에 의해 참조 변수가 범위

-1

이 객체는 살아있는 것없이, 그것은 가비지 컬렉터에 문제가 발생하지 않습니다.

명명되지 않은 개체에 대한 참조는 VM의 루트 집합에있는 VM 스택에 있습니다 (그렇지 않으면 메서드를 호출 할 수 없음).

+1

사실이 아닙니다. 'businessEntry'는 중간 개체에 대한 참조가 아니며 반환 된 GetObject에 대한 참조입니다. –

+0

@Ed : 그것은 문제의 대상이었습니다. 그리고 그것은 제가 말한 것입니다 - 나는 어떤 식 으로든 (새로운 Dal()) 객체를 의미하지는 않습니다. 마이너스를 제거하십시오. – Andrey

+0

그건 분명히 당신이 말한 것이 아니기 때문에 나는하지 않을 것입니다. *이 객체는 businessEntry에 의해 참조되고 해당 변수가 범위를 벗어난 후에 수집됩니다. * OP는 new DAL() 표현식에 의해 생성 된 객체에 대해 질문하므로 오해의 소지가 있거나 잘못되었습니다. –

1

그것은 매우 전형적인 코드의 외출 후에 언젠가 수집됩니다 동안