Scripting.Dictionary의 RemoveAll() 메서드는 모든 요소를 먼저 해제합니까?
-
09-06-2019 - |
문제
VB6 응용 프로그램에는 Dictionary
누구의 열쇠인가 String
s 및 값은 사용자 정의 클래스의 인스턴스입니다.내가 전화하면 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()
제휴하지 않습니다 StackOverflow