2

在使用 .Net 应用程序(假设是 Asp.Net 应用程序)时,与在 32 位平台上工作相比,在 64 位平台上工作时做事的方式有什么不同。

我想的很少,因为您正在研究框架,而框架正在为您处理大部分事情,对吗?

但是,请发表您的意见。

谢谢。

4

2 回答 2

3

如果您使用 p/invoke,那么您需要确保您有 64 位版本的 DLL 可用。如果您调用 MS 提供的 DLL,例如 kernel32,这不是问题,因为它们在 32 位和 64 位平台上具有相同的名称(我知道这很奇怪),因此您的 64 位应用程序将隐式链接到正确的版本。但是,如果您使用 3rd 方 DLL 并且您的 64 位应用程序尝试链接到 32 位 DLL,您将获得运行时异常。

这也意味着如果您使用的是进程内 COM 对象,您将遇到问题。当您跨越进程边界时,64 位应用程序可以调用 32 位的进程外 COM 对象(反之亦然),COM 将为您处理编组。

除此之外,该框架会为您处理大多数事情。您永远不必担心指针大小,并且 clr 类型具有明确的大小(int 始终为 32 位,long 始终为 64 位)。在纯粹的 .NET 世界中,几乎没有什么可担心的。当您开始在沙盒之外移动时,您必须更加小心。

于 2008-11-11T08:51:27.450 回答
2

在两种情况下考虑 64 位可能会很有趣:

  1. 您需要考虑具有超过 2^31 个元素的容器。标准数组 .Length 属性返回 Int32,因此无法表示大型数组 - 无论如何您都无法在 32 位 VM 中创建。在 64 位 VM 中,您应该改用 LongLength(除非您知道您的元素少于 2^31 个)。不幸的是,许多标准集合类似乎根本不支持大量元素。
  2. 您可以使用对性能关注较少的 long 类型:在 64 位版本中,long 适合寄存器,而在 32 位版本中,JIT 代码将需要多个机器指令来执行单个 long 操作。
于 2008-11-11T08:35:49.057 回答