1

관리되지 않는 C++ dll을 사용하는 .NET Windows 서비스를 구축하고 있습니다. 내 서비스와 C++ dll 모두 멀티 스레딩을 사용하고 있습니다. 처리하는 동안 약간의 시간 (시간)이 지나면 메모리가 부족합니다. 나는 를 "성능 카운터"를 사용하여 스레드의 수를 측정하기 위해 노력하고 나는 다음과 같은 값을 모니터링합니다현재 스레드의 성능 카운터

# of current logical Threads 
# of current recognized threads 
# of total recognized Threads 

을 첫 번째가 안정하고 그 값이 2와 3이 아닌 합리적인된다. 그들은 항상 성장하고 있으며 거대한 숫자 (1500 이상)에 이릅니다. 그리고 그들은 동등한 !!!!

동등해야합니까? 또한 해당 카운터가 관리되는 스레드와 관리되지 않는 스레드를 모두 계산하는 경우 this page에서 이해하지 못했습니다.

관리되지 않는 코드가 새 스레드를 재사용하는 대신 항상 시작한다고 생각하지만 확실하지 않습니다.

아무도 도와 줄 수 있습니까? 감사합니다.

+0

그래, dll은 재사용 중이 아니거나 사용 된 스레드를 처리하지 않은 것처럼 들린다. –

답변

1

소리가 새는 것과 같습니다. 대부분의 경우 관리되지 않는 DLL이 스레드를 제대로 처리하지 못합니다.

정말 테스트하려면이 DLL을 사용하는 단일 스레드 응용 프로그램을 작성하십시오. 앱을 모니터링합니다. 제대로 처리하지 못한다는 것을 알게되면 두 가지 상황 중 하나가 발생합니다.

리소스 (스레드)를 닫으려면 DLL에서 올바른 메서드를 호출하지 않습니다. 또는 DLL이 잘못 코딩되었습니다. 첫 번째 문제는 수정하기 쉽고 두 번째 문제는 소스 코드 또는 원본 개발자에게 액세스해야합니다.

DLL이고 사용자가 연락 할 수 없거나 수정하지 않으려는 경우 거의 동일한 작업을 수행하십시오.

+0

좋아요, 내가 제안한대로 (루프에서 해당 DLL을 사용하는 단일 스레드 응용 프로그램을 만들었습니다) 여전히 증가 모두를 참조하십시오 : 현재 인식 스레드 수 총 인식 스레드 수 그리고 그들은 항상 동일합니다 무엇입니까? 그게 무슨 뜻이야? –

+0

이것은 dll이 자체 리소스를 해제하지 않았거나 만들지 않은 dll에 함수 호출이 있음을 의미합니다. 나는 전직에 내기 할 것이다. 그것이 전자라면 dll을 만든 사람과 연락하고 업데이트가 있는지 확인하거나 같은 일을하는 다른 제품을 찾아야합니다. – NotMe