[英]Are there any considerations needed to be taken running your .net program on x64 vs x86?
我相信在制作.Net程序时,架构类型(x86 vs x64)会被抽象出来,但还有其他任何可能导致问题的因素吗?
谨防秘密进行win32调用的第三方COM库或第三方.NET库。 这就是我们最头疼的地方。
从MSDN doco ,以及其他考虑因素:
在许多情况下,程序集将在32位或64位CLR上运行相同的程序。 程序在64位CLR运行时表现不同的一些原因包括:
包含根据平台更改大小的成员的结构,例如任何指针类型。
包含常量大小的指针算法。
不正确的平台调用或使用Int32处理句柄而不是IntPtr的COM声明。
将IntPtr转换为Int32
此外,默认文件位置。
本文有很多值得注意的好问题: http : //osnews.com/story/20330/Windows_x64_Watch_List
就个人而言,我的老板有64位Vista计算机,我以32位模式编程。 我们遇到了以下问题:
32位应用程序的注册表被隐藏(有点)到Wow6432Node文件夹中。 并非您用于在注册表中查找路径的所有应用程序都将位于该节点中(例如,SQL Server不会)。
C:\\ Windows文件夹中的SysWow64可能导致DLL不在需要的地方(我们遇到了这个带有第三方许可组件的问题)。
有时您需要的文件位于“C:\\ Program Files(x86)”,而不是“C:\\ Program Files”。 太糟糕了。
在32位平台上读取和写入64位值不是线程安全的。 读取64位值需要两次操作,这些操作可能被上下文切换中断。 有关更多信息,请参阅有关Threading.Interlocked.Read的MSDN文章。
关于将32位应用程序移植到64位执行环境的问题,MSDN提出了一些文章。
http://msdn.microsoft.com/en-us/library/ms973190.aspx
另外两位博主在CLR团队工作时曾写过关于64位开发的文章
x64将允许您处理更多内存,但是给定相同的代码,它将使用比x86更多的内存。
根据我的经验,移植Asp.NET应用程序基本上完美无瑕。 在32位机器和64位上运行,除了有更多可用内存之外没有问题发生。 发生这种情况是因为已经提到的许多问题(注册表,线程等)都由Asp.NET管理,您需要正确地修复它们以在Asp.NET环境中运行。
客户端(Windows窗体)也发生了同样的情况,但如果您使用了一些“不安全”的API来获取特殊文件夹或注册表访问,则可能会出现一些问题,如已经指出的那样。
关心马西莫
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.