내 프로그램이 실행중인 컴퓨터가 하이퍼 스레딩을 사용하는지 어떻게 알 수 있습니까? (씨#)
-
23-08-2019 - |
문제
특정 시스템에서 사용할 수있는 실제 코어 수와 하이퍼 스레딩이 활성화되어 있는지 여부를 알아야 할 코드가 있습니다.
C#에서이 작업을 수행하는 방법이 있습니까?
업데이트 : 기계는 XP와 Vista의 혼합입니다.
업데이트 : 'win32_processor.numberofcores'또는 'win32_processor.numberoflogicalProcessors'에 액세스하는 것은 기계 중 하나에서 예외 ( "찾을 수 없음")를 통해 예외를 던집니다 (그러나 모든 것이 아님).
해결책
Vista 이상에서는 Pinvoke를 통해 GetLogicalProcessorInformation을 사용하여 논리 프로세서 장치의 수를 얻을 수 있습니다.
Windows XP에는 C#을 통해 다른 멀티 프로세서/코어 구성과 하이퍼 스레딩을 안정적으로 구별 할 수있는 방법이 없습니다. 누군가가 게시 한 WMI 솔루션은 멀티 코어 프로세서를 하이퍼 스레드로 클래스합니다.
Vista 이전에 유일한 신뢰할 수있는 수단은 프로세서의 CPUID를 확인하는 것입니다. 이를 사용하려면 관리 코드에서 호출 할 수있는 기본 DLL을 만들 수 있습니다. 다음 인텔 코드 견본 좋은 출발점이 될 것입니다.
다른 팁
System.environment.processorCount는 코드가 실행중인 컴퓨터에 몇 개의 코어가 있는지 알려줍니다.
환경을 확인합니다. 프로세스 서운트 속성, 하이퍼 스레딩까지는 정수를 반환합니다. 확실하지 않습니다.
Stackoverflow 질문 188503 필요한 정보가 있습니다 ...
해당 질문에 대한 최고 답변 인용 :
System.Environment.ProcessorCount
논리 프로세서 수를 반환합니다 (참조 MSDN)
Hyperthreaded와 별도의 코어를 구별하려면 약간의 WMI가 필요한 것처럼 들립니다.
GetLogicalProcessorInformation HT 측면에는 충분하지만 슬프게도 XP SP3, 64 비트 XP/Vista/Server 2003에서만 사용할 수 있습니다 (그리고 나는 약간 깨진 Pre Vista라고 생각합니다).
조 더피 Mark Russinovich가 자신이 만든 도구 (CoreInfo)를 릴리스했지만 아직 소스를 공개하지는 않았지만 코드를 볼 수있을 것입니다.