2010-01-08 3 views
1

IDictionary, IList 및 기본 유형 (string 및 ints)으로 구성된 계층 적 목록을 반환하는 라이브러리가 있습니다. 현재이 데이터가 반환되는 방식을 변경할 수 없습니다.가비지 수집기 질문

나는이 데이터를 소비하고이를 비즈니스 오브젝트로 변환하는 강하게 유형화 된 클래스가 있습니다. 반환 된 데이터에 "속성"목록이 있습니다.이 속성은 강력한 형식의 클래스로 가져 오려고합니다. 그런 다음 계층 구조를 처리 할 수 ​​있습니다.

내 질문은 이것이다 : 나는이 작업을 수행 할 경우 MyCustomClass 내 강력한 형식의 클래스이며, HierarchicalData가 나중에 호출 할 때 어떻게됩니까 IDictionary 데이터 인 경우

MyCustomClass.Properties = HierarchicalData["some_name"] 

:

HierarchicalData = null 

을 수 계층 적 데이터가 삭제되고 배포됩니까? 이 경우 "some_data"는 다른 사전이므로 기술적으로 모든 것을 보관해야합니다.

MyCustomClass.Properties = HierarchicalData["some_name"].ToDictionary<string, string>(/* selector */) 

대한 설명 : 같은, 내가 대신 수입의 명시 사본을해야합니까 내가 쓰레기 수집되는 속성을 포함하는 사전 걱정 아닙니다. 꽤 큰 HierarchicalData __can__을 삭제하려고합니다. 그리고 나는 그것들 중 몇개와 함께 작업해야합니다.

+1

'사전'은 'IDisposable'을 구현하지 않으므로 삭제할 필요가 없습니다. GC로 수집하기를 원할뿐입니다. – SLaks

+0

예, 여기에 제가 처분한다고 할 때 Dispose()와 같이 컬렉션의 대상이 아니므로 컬렉션 대상이 아닙니다. – GrayWizardx

답변

2

예. HierarchicalData에 대한 참조가 없으면 수집 대상이됩니다.

"some_name"키에 대해 저장된 데이터에 대한 참조가 있으므로 해당 특정 요소 (다른 사전)는 수집되지 않습니다.그러나 참조되지 않은 다른 부분은 GC가 관련되어있는 한 루핑되지 않고 어느 시점에서 마무리됩니다.

+0

신난다. 내가 생각한 것이지만 확인하고 싶었던 것. – GrayWizardx

1

예상대로 작동합니다. 다른 곳에서 HierarchicalData["some_name"]으로 참조되는 사전에 대한 참조를 만들었으므로 가비지 수집기가이를 유지합니다.

확실히 사전을 복사 할 필요가 없습니다.

1

클래스가 표준 Dictionary<TKey, TValue>을 반환한다고 가정하면 다른 작업을 수행 할 필요가 없을 것입니다.

개체에는 아마도 개체가 포함 된 사전에 대한 참조가 들어 있지 않기 때문에 아마도 사전이 수집되지 않을 것입니다.
그러나 확인하지 않고도 확인할 방법이 없습니다. Visual Studio 디버거의 조사 식 창에서 개체를 검사하거나 원본을보고 사전을 참조하는지 확인해야합니다.

+0

그래, 이걸 시험 장비에 넣고 야간에 프로필 테스트를하기 전에 가장 가능성있는 방법을 구현하고 싶었어. – GrayWizardx

0

복사를 수행 할 필요가 없습니다.

라인은 :

MyCustomClass.Properties = HierarchicalData["some_name"] 

은 참조를 할당하고, 객체에 대한 참조가 살아있는 동안, 가비지 수집되지 않을 것이다.

0

Can 계층 적 데이터를 처리하고 릴리스 할 수 있습니까?

GC를 의미합니까? 이 경우가 아니라 객체에 의해 참조됩니다. GC는 그것을 엉망으로 만들지 않을 것입니다.

관련 문제