Scripting.Dictionary의 RemoveAll() 메서드는 모든 요소를 ​​먼저 해제합니까?

StackOverflow https://stackoverflow.com/questions/75011

문제

VB6 응용 프로그램에는 Dictionary 누구의 열쇠인가 Strings 및 값은 사용자 정의 클래스의 인스턴스입니다.내가 전화하면 RemoveAll()Dictionary, 먼저 사용자 정의 개체를 해제합니까?아니면 명시적으로 이 작업을 직접 수행해야 합니까?

Dim d as Scripting.Dictionary

d("a") = New clsCustom
d("b") = New clsCustom

' Are these two lines necessary?
Set d("a") = Nothing
Set d("b") = Nothing

d.RemoveAll
도움이 되었습니까?

해결책

예, 다음의 모든 개체는 Dictionary 통화 후 해제됩니다. RemoveAll().성능(속도와 같은) 관점에서 변수를 다음과 같이 설정하는 라인을 말하고 싶습니다. Nothing 코드는 먼저 키 이름을 기반으로 검색해야 하기 때문에 필요하지 않습니다. RemoveAll() 하나의 루프에서 모든 것을 열거하고 해제합니다.

다른 팁

RemoveAll 모든 연결을 제거합니다. Dictionary:키와 값 모두.에 대한 참조 유출이 될 것입니다. Dictionary 값에 대한 참조를 유지하려면 Dictionary.

컬렉션의 항목을 참조하는 다른 변수가 없는 경우 해당 개체는 다음에 GC가 실행될 때 정리되도록 가비지 수집기로 전달되어야 합니다.

예를 들어 sObj가 정적 변수인 경우 시스템에서 다음에 GC를 호출할 때 첫 번째 개체는 정리되지만 여전히 sObj에서 참조하는 두 번째 개체는 정리되지 않습니다.

d("a") = New clsCustom
d("b") = New clsCustom code.
sObj = d("b")

d.RemoveAll()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top