x64 vs x86에서 .NET 프로그램을 실행 해야하는 고려 사항이 있습니까?
문제
.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 자세한 내용은.
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에 감사합니다