2011-05-11 2 views
13

VS 2010에서 C# 프로젝트의 기본 플랫폼 타겟이 x86 (모든 CPU로 사용됨)이며 변경 이유가 궁금했습니다.닷넷 플랫폼 타겟 최적화

플랫폼을 x86 대 x64 대 CPU로 고정하여 컴파일러가 최적화를 수행합니까?

성능상의 이유로 하나의 플랫폼 또는 다른 플랫폼에 내 앱을 강제 적용해야합니까?

+0

최적화가 필요한지 모르겠지만 x86 용으로 컴파일 된 라이브러리를 참조하는 경우 x86 용 프로젝트를 빌드해야합니다. 그렇지 않으면 런타임에 어셈블리를로드하지 못합니다. – R0MANARMY

+1

변경 사항은 64 비트 프로세스로 실행하는 것이 거의 유익하지 않으며 종종 최적화되지 않은 메모리 (더 많은 메모리가 사용되거나 필요한 라이브러리를로드 할 수없는 등) 때문에 변경되었습니다. – Gabe

+1

@ Kragen의 답변에서 이것을 게시했는데, 아마도 여기에 넣었어야합니다. -이 [question] (http://stackoverflow.com/questions/516730/visual-studio-any-cpu-target) 모든 CPU '옵션. –

답변

15

이전 버전의 Visual Studio에서는 "모든 CPU"로 기본 설정되어 있습니다. 즉, x86 컴퓨터에서는 항상 x86을 사용하게되고 x64 컴퓨터에서는 x64 또는 x86을 실행하게됩니다. 어셈블리가로드되는 프로세스가 32 비트 또는 64 비트인지 여부.

새로운 프로세스를 시작할 때 "Any CPU"옵션으로 빌드 된 .Net EXE가 32 비트 프로세스가 아닌 64 비트 프로세스로 끝나게되어 다음 두 가지 이유로 문제가 발생할 수 있습니다.

  • x86 용으로 컴파일 된 모든 원시 모듈 (예 : 대부분의 모듈)은 프로세스에 더 이상로드되지 않습니다.이 결과로 얻은 오류는이 문제를주의하지 않으면 때때로 이상합니다.).
  • 또한 실제로 응용 프로그램에서 4GB 이상의 주소 공간을 사용하지 않는 경우 (예 : 64 비트 OS에서 운영 체제가 32 비트 프로세스의 최상위 1-2GB 주소 공간을 예약하지 않음) 증가 된 포인터 크기로 인해 32 비트 코드보다 성능이 떨어집니다.

실제로 이러한 문제를 피하기 위해 충분한 주소 공간 (예 : 메모리)을 사용하는 응용 프로그램이 적기 때문에 기본값을 x86으로 변경했습니다.

+0

좋은 답변입니다. 정보 주셔서 감사합니다. –

+1

또한이 [답변] (http://stackoverflow.com/questions/516730/visual-studio-any-cpu-target)이 '모든 CPU'옵션을 이해하는 데 도움이된다는 것을 알았습니다. –

3

라이브러리가 여전히 모든 CPU 및 라이브러리로 기본 설정되어 있는지 확인합니다. 최적화가있는 경우 EXE에만 적용되며 의미가 없습니다. 아니요, 문제는 모든 CPU 실행 파일이 일반적으로 수행하는 작업을 알고있는 사람들의 손을 제외하고는 가치가있는 것보다 더 번거로운 점입니다. 그리고 그들이 원하는 것을 아는 사람들에게는 기본값이 심각한 문제가 아닙니다.

초기에이 정책에 동의하지는 않았지만 x86 디버깅 경험이 우수하기 때문에이 정책을 그대로 받아 들였습니다 : 기본값.