.NET平台目标优化

13

我注意到在VS 2010中,C#项目的默认平台目标是x86(以前是任何CPU),想知道这个改变的原因是什么。

编译器是否会根据将平台修复为x86与x64 vs Any CPU执行任何优化?

出于性能考虑,我是否应该强制我的应用程序使用其中一个平台?


我不知道这是否属于优化,但如果你引用了一个为x86编译的库,你也需要为x86构建一个项目,否则它在运行时将无法加载程序集。 - Roman
1
更改的原因是很少有益于作为 64 位进程运行,而且通常是次优的(使用更多内存,无法加载必要的库等)。 - Gabe
1
在@Kragen的回答中发布了这篇文章,但可能应该放到这里 - 这个问题对于理解“任何CPU”选项非常有帮助。 - Gian Paolo
2个回答

15

之前的 Visual Studio 版本默认是 "Any CPU",这意味着在 x86 机器上你总是会使用 x86,而在 x64 机器上,你将最终使用 x64 或 x86,这取决于加载程序集的进程是否为 32 位或 64 位。

问题在于,使用“任何 CPU”选项构建的 .Net exe 启动新进程时,将以 64 位进程而非 32 位进程的方式启动,这可能会导致两个问题:

  • 编译为 x86 的所有本机模块(即大部分)将不再加载到您的进程中(如果您不知道此问题会发生,也会产生一些难以理解的错误信息)。
  • 而且,除非应用程序实际上使用超过 4GB 的地址空间(即内存 - 请注意,在 64 位操作系统中,操作系统不再为 32 位进程保留顶部 1-2GB 的地址空间),否则,由于指针大小增加,64 位代码通常比 32 位代码表现更差。

由于很少有应用程序实际使用足够的地址空间(即内存)使麻烦变得值得,因此默认设置为 x86,以避免这些问题。


1
我也发现这个答案对于理解“Any CPU”选项很有帮助。 - Gian Paolo

3
您会注意到,库仍然默认为 Any CPU,并且库应始终为 Any CPU,因此如果存在优化,则只应用于可执行文件,这是没有意义的。 不,问题在于除了那些知道自己在做什么的人之外,Any CPU 可执行文件通常会带来更多麻烦而不值得。 而对于那些知道自己想要什么的人来说,默认设置并不是一个严重的问题。
我还要补充一点,起初我不同意这个政策,但由于 x86 调试体验优秀,我已经接受它作为默认设置。

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