x64 vs x86에서 .NET 프로그램을 실행 해야하는 고려 사항이 있습니까?

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

  •  02-07-2019
  •  | 
  •  

문제

.NET 프로그램을 만들 때 아키텍처 유형 (x86 vs x64)이 당신을 위해 추상화되었다고 생각하지만 문제를 일으킬 수있는 다른 고려 사항이 있습니까?

도움이 되었습니까?

해결책

비밀리에 Win32 호출을하는 타사 COM 라이브러리 또는 제 3 자 .NET 라이브러리를 조심하십시오. 그것이 우리가 가장 큰 두통을 가졌던 곳입니다.

다른 팁

로부터 MSDN DOCO, 다른 고려 사항들 중에서도 :

많은 경우에, 어셈블리는 32 비트 또는 64 비트 CLR에서 동일하게 실행됩니다. 64 비트 CLR이 실행할 때 프로그램이 다르게 행동하는 몇 가지 이유는 다음과 같습니다.

  • 포인터 유형과 같이 플랫폼에 따라 크기를 변경하는 멤버를 포함하는 스트러크.

  • 일정한 크기를 포함하는 포인터 산술.

  • INTPTR 대신 핸들에 int32를 사용하는 잘못된 플랫폼 호출 또는 COM 선언.

  • intptr에 int32를 주조합니다

또한 기본 파일 위치.

이 기사는 다음을 알고 있어야 할 많은 좋은 문제가 있습니다.http://osnews.com/story/20330/windows_x64_watch_list

개인적으로 내 상사는 64 비트 비스타 컴퓨터를 가지고 있으며 32 비트 모드로 프로그램합니다. 우리는 다음과 같은 문제를 해결했습니다.

  • 32 비트 앱의 레지스트리는 WOW6432Node 폴더에 숨겨져 있습니다. 레지스트리에서 경로를 찾는 데 사용되는 모든 앱이 해당 노드에있는 것은 아닙니다 (예 : SQL Server는 그렇지 않음).

  • C : Windows 폴더의 SYSWOW64는 DLL이 필요한 곳에 있지 않은 문제를 일으킬 수 있습니다 (우리는 제 3 자 라이센스 구성 요소가있는이 문제가있었습니다).

  • 때로는 필요한 파일이 "C : Program Files"가 아닌 "C : Program Files (x86)"에 있습니다. 너무 짜증나.

  • 64 비트 값을 읽고 쓰는 것은 32 비트 플랫폼에서 스레드 안전하지 않습니다. 64 비트 값을 읽으면 컨텍스트 스위치에 의해 중단 될 수있는 두 개의 작업이 필요합니다. MSDN 기사를 참조하십시오 threading.interlocked.read 자세한 내용은.

  • 또한 전적으로 동의합니다 orial'에스 답변! :-)

MSDN은 32 비트 응용 프로그램을 64 비트 실행 환경으로 포팅하는 문제에 관한 작은 논문을 제시했습니다.

http://msdn.microsoft.com/en-us/library/ms973190.aspx

다른 두 블로거는 이전에 CLR 팀에서 일할 때 약 64 비트 개발을 썼습니다.

X64를 사용하면 더 많은 메모리를 해결할 수 있지만 동일한 코드가 주어지면 X86보다 더 많은 메모리를 사용합니다.

내 경험상 ASP.NET 응용 프로그램을 포팅하는 것은 기본적으로 완벽했습니다. 32 비트 머신과 64 비트로 실행하면 더 많은 메모리를 사용할 수있는 것 외에도 문제가 발생하지 않습니다. 이는 이미 언급 한 많은 문제 (레지스트리, 스레딩 등)가 ASP.NET에 의해 관리되었으며 ASP.NET 환경에서 실행하려면 올바르게 수정해야하기 때문입니다.

클라이언트 측 (Windows Form)이 같은 일이 있었지만 "안전하지 않은"API를 사용하여 특수 폴더 또는 레지스트리 액세스를 얻은 경우 이미 지적 된대로 일부 문제가 발생할 수 있습니다.

Massimo에 감사합니다

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