32位.NET应用程序和64位.NET应用程序之间有区别吗?

我的理解是.NET应用程序是独立于平台的,因此纯.NET代码应该在x86或64位机器上运行。 除非您的.NET代码调用某些本机代码,否则它依赖于平台。 真的吗?

.NET应用程序可以编译为定位x86,x64或“Both”。 通常,如果您依赖于其他平台无法使用的COM控件等,则只针对一个平台。

您的代码可以编译为完全独立于平台,或者您可以定位特定平台。 标准建议是使库架构中立(即“任何CPU”)并将x86作为可执行文件的目标。 这里解释了Visual Studio 2010默认使用此方法的原因: AnyCPU可执行文件通常比它们的价值更麻烦 :

  1. 以两种非常不同的模式(x64和x86)运行会增加产品复杂性和测试成本。
  2. 无论如何,32位往往更快(稍微)一点。
  3. 某些function在x64中不可用。
  4. 如果超过4 GB的地址空间是有用的,那么正确的做法是针对x64并避免支持两个平台的成本。

当然,如果您只是针对x86,那么您的代码仍将在x64到WoW64上运行。

是的,你说的是真的。 纯.NET代码是独立于平台的(Visual Studio中的“任何CPU”),除非使用外部库(据我所知COM和P / Invokes )。 然后,您的平台必须与用于构建外部库的平台相匹配。

文章返回基础:围绕x86和x64的32位和64位混淆以及.NET Framework和CLR很好地解释了这些差异。