다중 스레드 응용 프로그램에서 tracelistener를 사용하여 원격으로 메시지를 기록하지만 응용 프로그램이 메모리 오버플로를 만듭니다.추적 수신기 - 메모리 오버플로 만들기
테스트를 위해 10,000 개의 스레드를 만들고 TraceData 기능을 사용하여 메시지를 기록하려고했습니다.
.Net 프레임 워크는 메모리 오버플로가 발생하는 TraceData에 대한 모든 호출에 대해 개체를 만듭니다.
다중 스레드 응용 프로그램에서 tracelistener를 사용하여 원격으로 메시지를 기록하지만 응용 프로그램이 메모리 오버플로를 만듭니다.추적 수신기 - 메모리 오버플로 만들기
테스트를 위해 10,000 개의 스레드를 만들고 TraceData 기능을 사용하여 메시지를 기록하려고했습니다.
.Net 프레임 워크는 메모리 오버플로가 발생하는 TraceData에 대한 모든 호출에 대해 개체를 만듭니다.
10,000 개의 스레드 : 각각 (기본) 1MB 스택 공간이 할당됩니다. 따라서 그들은 32 비트 프로세스에서는 불가능한 10GB RAM을 필요로 할 것입니다 (그리고 64 비트에서 총 RAM/페이지를 깰 가능성이 있습니다).
추적과 관련이 없습니다.
추가 사항 : Mark Russinovich의 Windows 스레드 및 프로세스 제한에 대한 최신 기사. 마지막 단락에 유의하십시오. "Pushing the Limits of Windows: Processes and Threads"
우리가 만들 수있는 최대 스레드 수는 얼마입니까? – somaraj
(사용 가능한 RAM/1048576)이므로 2/3GB의 사용 가능한 RAM은 2048/3072입니다. – schnaader
다른 것들을 위해 얼마나 많은 주소 공간이 필요한가에 따라, 각 스레드는 다른 할당을 차단하지만 실제 질문은 얼마나 많은 것들이 유용한 것들을하고 있는지입니다. 오늘 (현재 가장 큰 서버에서도) 100 개의 스레드를 치는 것을 기대하지는 않습니다. (더 많은 코어와 메모리가 지원됨에 따라 서서히 증가 할 것으로 예상됩니다.) – Richard