为64位平台编程

时间:2008-11-11 08:24:44

标签: .net 64-bit

在开发.Net应用程序时(假设是Asp.Net),与在32位平台上工作相比,在64位平台上工作的方式有什么不同。< / p>

我想你很少,因为你正在研究这个框架,框架正在为你处理大部分事情,对吗?

但是,请发表您的意见。

感谢。

2 个答案:

答案 0 :(得分:3)

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

这也意味着如果您正在使用进程内COM对象,那么您将遇到问题。当你在一个进程边界移动时,一个64位应用程序可以调用一个32位的进程外COM对象(反之亦然),COM会为你处理编组。

除此之外,框架会为您处理大部分事情。你永远不必担心指针大小,clr类型有明确的大小(int总是32位,长总是64位)。在纯.NET世界中,几乎没有什么可担心的。当你开始移动到沙箱之外时,你必须更加小心。

答案 1 :(得分:2)

有两种情况认为64位可能很有趣:

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