Windows 7 용 C++에서 멀티 스레드 응용 프로그램이 있습니다.이 응용 프로그램은 다른 C# 응용 프로그램을 사용하기위한 DLL로 컴파일됩니다.Win 7 응용 프로그램의 핸들 제한
스트리밍 데이터를 처리하는 데 오랜 시간 동안 다중 스레드 코드를 실행합니다. 이 C++ 코드를 독립 실행 형 .exe로 컴파일하고 코드를 실행하면 정상적으로 작동합니다.
그러나 DLL로 바뀌고 C# 코드가 함께 실행되면 프로그램을 장기간 실행하면 액세스 위반 오류로 인해 충돌합니다. Python 스크립트에서 DLL을로드하고 장시간 실행하면 비슷한 오류가 발생합니다.
작업 관리자를 사용하여 동작을 볼 때 정말 빠른 속도로 증가하는 시스템 핸들 수가 나타납니다. 약 2 시간 동안 코드를 실행 한 후, 핸들 수는 300,000을 넘었고 계속 증가합니다.
다중 스레드 코드 내에서 스레드가 생성되고 연속적으로 숨김 상태가됩니다. 스레드가 종료 된 후에는 스레드 핸들이 CloseHandle 함수에 의해 명시 적으로 닫히지 않습니다. 이것이 잠재적 인 문제가 될 수 있습니까?
핸들 문제인지 어떻게 확인합니까? 이러한 시스템 리소스를보다 나은 방법으로 시청하는 방법은 무엇입니까? 수정하기 전에 테스트를 실행하는 데 5 시간 이상이 걸릴 수 있으므로 가능한 모든 해결책을 알고 싶습니다.
[MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85) .aspx)에 따르면 : _ 스레드 개체는 시스템에 남아있을 때까지 시스템에 남아 있습니다. 스레드가 종료되었고 CloseHandle에 대한 호출을 통해 모든 핸들이 닫혔습니다. _ –
도구에 대한 권장 사항을 묻는 질문이므로 질문이 닫힐 수 있습니다. 원인을 찾는 도구가 아닌 원인을 재검토하기 위해 편집 할 수 있습니다. 그 동안 DLL이 언로드되지 않을 때 프로세스가 끝날 때 리소스가 Windows에서 해제되기 때문에 핸들 누수가 발생할 수 있습니다. –
핸들이 닫히지 않은 경우 (스레드가 작성된 후나 닫힌 경우) 버그가 발생하여 분명히 증상을 설명 할 수 있습니다. 내가 너라면 버그를 먼저 해결할 것이고, 증상이 계속되면 추가로 문제를 해결하는 것에 대해서만 걱정할 것이다. –