.Net平台目标优化

时间:2011-05-11 04:11:39

标签: c# .net

我在VS 2010中注意到C#项目的默认平台目标是x86(它曾经是任何CPU),并且想知道为什么要进行更改。

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

出于性能原因,我应该将我的应用程序强制推送到一个平台吗?

2 个答案:

答案 0 :(得分:15)

以前版本的Visual Studio用于将其默认为“Any CPU”,这意味着在x86机器上总是最终使用x86,而在x64机器上,最终会运行x64或x86,具体取决于是否加载程序集的进程是32位还是64位。

问题在于,当启动一个新进程时,使用“Any CPU”选项构建的.Net exe将最终成为64位进程而不是32位进程,这可能会导致问题,原因有两个:

  • 为x86编译的任何本机模块(即大多数)都不会再加载到您的进程中(如果您不知道要注意这个问题,那么由于此而导致的错误有时会很神秘)
  • 此外,除非您的应用程序实际使用超过4GB的地址空间(即内存 - 请注意,操作系统不再为64位操作系统中的32位进程保留前1-2GB的地址空间),通常使用64位代码由于指针大小的增加,性能比32位代码差。

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

答案 1 :(得分:3)

您会注意到库仍然默认为任何CPU,并且库总是应该是任何CPU,所以如果有优化,它们只适用于EXE,这没有意义。不,问题是任何CPU可执行文件通常都比它们的价值更麻烦,除非在知道他们正在做什么的人手中。对于那些知道自己想要什么的人来说,默认值不是一个严重的问题。

我会补充一点,我最初并不同意这个政策,但由于x86的调试经验非常出色,我接受它的原因是:默认。

相关问题