2012-06-11 3 views
0

나는 영원한 라이브러리 (DLL)를 사용하여 특정 파일 형식으로로드하고로드 기능이 실제로로드되지 않는다는 것을 알아 냈습니다. 처음 동일한 객체를 호출 할 때로드되지만 새로운 파일을 열기 위해 다시 호출하면 항상로드되지는 않습니다. 이로 인해 새 파일을로드 할 때마다 CreateObject를 호출해야합니다. 이 문제는 VB6가 이전 개체를 전혀 사용하지 않는 것으로 보이고 RAM 및 VM 사용이 GB로 빠르게 팽창합니다.VB6 CreateObject의 메모리 누수

강제로 해제하는 방법이 있습니까? 변수를 "Nothing"또는 "Null"로 설정하면 아무 것도하지 않고 앱이 너무 부풀어 올라 실제로 메모리가 부족하고 충돌이 발생합니다. (IDE가 너무 오래되어서 Win7에서 제대로 작동하지 않아서 VM 내에서 실행해야합니다.) 잘 작동하지 않습니다.

순환 참조를 찾았지만 아무 것도 없습니다 해당 개체를 사용하여 파일을로드하고 파일의 속성을 ADO 개체로 읽어 들여 실제 파일 자체가 ADO 개체로 참조되는 일은 없으며 다양한 필드 만 포함됩니다.

+0

IDE와 마찬가지로 Win7에서 정상적으로 작동합니다. 관리자로 시작하십시오. – AngryHacker

+4

다른 DLL을 포함하고 있음을 이미 발견 한이 DLL에는 메모리 누수가 없다고 확신합니까? –

+1

예, 제작자가 VBA에서 Excel 또는 C#을 사용하여 DLL을 누출하지 않습니다. – HandOfCode

답변

1

VB6 프로젝트에서 직접 참조를 사용하거나 "CreateObject"를 사용하여 개체 참조를 인스턴스화하는 것은 중요하지 않습니다. 타사 구성 요소에 메모리 누수가있는 경우 동일한 동작이 발생합니다.

관리되지 않는 리소스를 인스턴스화하려면 "Dispose"를 호출해야합니다. 그 외, 메서드 호출이 완료되고 Visual Basic 런타임에서 참조를 사용하여 참조를 정리할 때 개체 인스턴스가 범위를 벗어납니다. 타사 구성 요소에 실제로 메모리 누수가있는 경우이를 방지하기 위해 할 수있는 일이 없으므로 DLL을 패치해야합니다.