.Net 平台目标优化

本文关键字:优化 目标 平台 Net | 更新日期: 2023-09-27 17:56:18

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

编译器是否基于将平台固定为 x86 vs x64 和任何 CPU 来执行任何优化?

出于性能原因,我应该强制我的应用使用一个平台还是另一个平台?

.Net 平台目标优化

以前版本的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以避免这些问题。

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

我要补充一点,我最初不同意这个策略,但由于 x86 调试体验更胜一筹,我开始接受它:默认值。