내 프로그램이 실행중인 컴퓨터가 하이퍼 스레딩을 사용하는지 어떻게 알 수 있습니까? (씨#)

StackOverflow https://stackoverflow.com/questions/543039

  •  23-08-2019
  •  | 
  •  

문제

특정 시스템에서 사용할 수있는 실제 코어 수와 하이퍼 스레딩이 활성화되어 있는지 여부를 알아야 할 코드가 있습니다.

C#에서이 작업을 수행하는 방법이 있습니까?

업데이트 : 기계는 XP와 Vista의 혼합입니다.

업데이트 : 'win32_processor.numberofcores'또는 'win32_processor.numberoflogicalProcessors'에 액세스하는 것은 기계 중 하나에서 예외 ( "찾을 수 없음")를 통해 예외를 던집니다 (그러나 모든 것이 아님).

도움이 되었습니까?

해결책

Vista 이상에서는 Pinvoke를 통해 GetLogicalProcessorInformation을 사용하여 논리 프로세서 장치의 수를 얻을 수 있습니다.

Windows XP에는 C#을 통해 다른 멀티 프로세서/코어 구성과 하이퍼 스레딩을 안정적으로 구별 할 수있는 방법이 없습니다. 누군가가 게시 한 WMI 솔루션은 멀티 코어 프로세서를 하이퍼 스레드로 클래스합니다.

Vista 이전에 유일한 신뢰할 수있는 수단은 프로세서의 CPUID를 확인하는 것입니다. 이를 사용하려면 관리 코드에서 호출 할 수있는 기본 DLL을 만들 수 있습니다. 다음 인텔 코드 견본 좋은 출발점이 될 것입니다.

다른 팁

최소한 첫 번째 질문에 대한 간단한 답변 : 환경 .processorCount 기계의 코어 수를 반환해야합니다.

편집하다: 여기'HyperThreading이 활성화되어 있는지 확인하는 SA 비 WMI 기반 방법 방법 (반드시 더 좋은 것은 아닙니다). 또한 참조하십시오 이것 기사.

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)를 릴리스했지만 아직 소스를 공개하지는 않았지만 코드를 볼 수있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top