我相信架构类型(x86 与 x64)在制作 .Net 程序时已为您抽象出来,但还有其他可能导致问题的考虑因素吗?
7 回答
谨防秘密进行 win32 调用的第三方 COM 库或第三方 .NET 库。这就是我们最头疼的地方。
来自MSDN doco,除其他注意事项外:
在许多情况下,程序集在 32 位或 64 位 CLR 上运行相同。程序在 64 位 CLR 上运行时表现不同的一些原因包括:
包含根据平台更改大小的成员的结构,例如任何指针类型。
包含常量大小的指针算法。
不正确的平台调用或 COM 声明使用 Int32 而不是 IntPtr 作为句柄。
将 IntPtr 转换为 Int32
此外,默认文件位置。
这篇文章有很多好问题需要注意: http: //osnews.com/story/20330/Windows_x64_Watch_List
就个人而言,我的老板有一台 64 位的 Vista 计算机,而我在 32 位模式下编程。我们遇到了以下问题:
32 位应用程序的注册表被隐藏(有点)到 Wow6432Node 文件夹中。并非您习惯在注册表中查找路径的所有应用程序都将位于该节点中(例如,SQL Server 不会)。
C:\Windows 文件夹中的 SysWow64 可能会导致 DLL 不在需要的地方(我们在使用 3rd 方许可组件时遇到了这个问题)。
有时您需要的文件位于“C:\Program Files (x86)”,而不是“C:\Program Files”。也很烂。
在 32 位平台上读取和写入 64 位值不是线程安全的。读取 64 位值需要两个操作,这些操作可能会被上下文切换中断。有关详细信息,请参阅有关Threading.Interlocked.Read的 MSDN 文章。
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 窗体)也发生了同样的情况,但如果您使用了一些“不安全”的 API 来获取特殊文件夹或注册表访问权限,那么可能会发生一些问题,正如已经指出的那样。
问候马西莫