为什么在Visual Studio中,WPF应用程序的默认平台目标是x86而不是AnyCPU?

7

当我在Visual Studio 2012中创建一个新的WPF应用程序时,默认情况下平台目标和构建配置是设置为x86的。为什么会这样呢?对于一个普通的WPF应用程序(没有引用混合模式程序集),如果我使用AnyCPU,是否存在在x64机器上将我的WPF可执行文件JIT编译为x64代码,在x86机器上编译为x86代码的任何危险性?

3个回答

5
大多数应用程序构建为32位实际上更好。64位提供很少的好处,在大多数情况下存在一些重要的缺点(更高的内存使用率,与多个平台的更复杂的依赖管理,更糟糕的调试体验等)。但是,如果您的应用程序需要能够使用大量内存,那么64位当然具有优势(并且在VS中很容易切换),但是大多数应用程序不属于这种情况。这就是为什么VS 2012中的新默认值是使用AnyCPUPrefer32Bit而不是AnyCPU的原因。

2
根据这个错误报告,由于x64机器上的x64代码存在编辑和继续问题,因此将默认平台目标更改为x86。通过将其更改为x86,编辑和继续功能可以正常工作。
将其切换为AnyCPU应该没有危险性。我总是这样做。

0

如果你选择指定一个CPU的话,那么你就会自动限制你的.exe文件只能在其中一种平台上运行。

除非你绝对需要32位的依赖关系,否则很少有这样做的理由:

换句话说,并没有“性能”问题。真正的问题是“兼容性”。如果你加载任何32位组件,并且你在64位平台上,那么你必须调用WOW64。CLRTIMAGETYPE可以让你做到这一点。


1
当我阅读问题时,问题在于VS默认选择特定于平台的设置。 - Brian Rasmussen
2
同样,选择x86并不限制您的.exe文件只能在x86上运行。64位的Windows系统可以在WOW64下正常运行x86可执行文件。选择x64会有限制,但其他选项则没有这个问题。 - Reed Copsey
+1 @Reed Copsey,非常重要的一点。只是想指出(正如Reed的回答已经很清楚了),x86排除了ARM但不排除基于x64的机器,而AnyCpuPrefer32位是描述前面评论中所说的确切设置 - 它不排除ARM或基于x64的机器。(我知道这句话太长了,可能会让一些人更加困惑,但是...) - Ruben Bartelink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接