COM interop을 통해 Visual Basic .NET 응용 프로그램에서 사용하고있는 VB6로 작성된 COM 구성 요소가 있습니다.내 COM 구성 요소가 OutOfMemoryException을 throw하지만 VB6에서 제대로 실행되는 이유는 무엇입니까?
VB.NET에서 호출 할 때 OutOfMemoryException을 throw하는 메서드가 있습니다. 그러나 Visual Basic 6 응용 프로그램에서 똑같은 호출을 실행하면 모든 것이 잘 동작합니다.
VB6에서 디버깅하려고하면 오류가 발생하지 않기 때문에 너무 길고 따라하기 힘듭니다 (코드 수정 문제가 있음) 및 문제를 찾아 낼 수 없어 코드를 여기 게시 할 수 없습니다. 보여줘.
이 별개의 동작을 유발할 수있는 원인은 무엇입니까?
Dictionary 개체 (Microsoft Scripting Runtime의 COM)를 사용하여 성능 문제를 해결할 때까지 문제가 없었습니다. 사전이 비합리적으로 성장하거나 누출되지 않는 한, 예외가 발생하기 전에 사전이 100-200 요소를 초과하지 않고 하나만 생성되기 때문에 이것이 사전에 원인이 될 수있는 방법을 알지 못합니다.
나는 Collection 개체와 어색한 Exists() 함수를 사용하여 동일한 문제를 해결했지만 동일한 문제가 발생합니다. Nothing을 반환하여 일찍 탈출하면 작동합니다 (즉, NullReferenceException이 throw됩니다).
의미있는 스택 트레이스가 있습니까? 그리고 기억은 어떨까요? 프로세스의 크기는 얼마입니까? –
@Simon : stacktrace는 COM/.NET 경계에서 끝납니다. 예외가 스택을 가로 질러 날아갈 때 프로세스는 약 100 megs입니다. –
Scripting.Dictionary COM 개체는 STA (Apartment)로 표시되어 있습니다. 아래에서 weloytty가 설명했듯이 스레딩을 확인 했습니까? 그리고 BTW, 다중 스레드를 사용하여이 사전에 액세스하고 있습니까? –