14

我相信架构类型(x86 与 x64)在制作 .Net 程序时已为您抽象出来,但还有其他可能导致问题的考虑因素吗?

4

7 回答 7

19

谨防秘密进行 win32 调用的第三方 COM 库或第三方 .NET 库。这就是我们最头疼的地方。

于 2008-09-28T02:35:41.790 回答
11

来自MSDN doco,除其他注意事项外:

在许多情况下,程序集在 32 位或 64 位 CLR 上运行相同。程序在 64 位 CLR 上运行时表现不同的一些原因包括:

  • 包含根据平台更改大小的成员的结构,例如任何指针类型。

  • 包含常量大小的指针算法。

  • 不正确的平台调用或 COM 声明使用 Int32 而不是 IntPtr 作为句柄。

  • 将 IntPtr 转换为 Int32

此外,默认文件位置。

于 2008-09-28T02:42:02.600 回答
9

这篇文章有很多好问题需要注意: 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”。也很烂。

于 2008-09-28T03:16:06.123 回答
2
  • 在 32 位平台上读取和写入 64 位值不是线程安全的。读取 64 位值需要两个操作,这些操作可能会被上下文切换中断。有关详细信息,请参阅有关Threading.Interlocked.Read的 MSDN 文章。

  • 也完全同意torial回答!:-)

于 2008-09-28T13:28:34.683 回答
2

MSDN 发表了一篇关于将 32 位应用程序移植到 64 位执行环境的小论文。

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

另外两位博主在 CLR 团队工作时曾写过关于 64 位开发的文章

于 2008-11-25T15:54:40.407 回答
1

x64 将允许您寻址更多内存,但给定相同的代码,它将使用比 x86 更多的内存。

于 2008-09-28T02:36:00.667 回答
0

根据我移植 Asp.NET 应用程序的经验,基本上是完美无缺的。在 32 位机器和 64 位机器上运行,除了有更多可用内存之外,没有问题发生。发生这种情况是因为已经提到的许多问题(注册表、线程等)已由 Asp.NET 管理,您需要正确修复它们才能在 Asp.NET 环境中运行。

客户端(Windows 窗体)也发生了同样的情况,但如果您使用了一些“不安全”的 API 来获取特殊文件夹或注册表访问权限,那么可能会发生一些问题,正如已经指出的那样。

问候马西莫

于 2008-12-29T16:05:50.910 回答