【问题标题】:.Net Platform Target Optimizations.Net 平台目标优化
【发布时间】:2011-05-11 04:11:38
【问题描述】:

我注意到在 VS 2010 中,C# 项目的默认平台目标是 x86(它曾经是任何 CPU),我想知道为什么会发生这种变化。

编译器是否在将平台固定为 x86、x64 和任何 CPU 的基础上执行任何优化?

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

【问题讨论】:

  • 我不知道是不是优化,但是如果你引用一个为 x86 编译的库,你还需要为 x86 构建一个项目,否则它将无法在运行时加载程序集.
  • 进行更改是因为作为 64 位进程运行几乎没有什么好处,而且通常不是最理想的(使用更多内存,无法加载必要的库等)。
  • 在@Kragen 的回答中发布了这个,但可能应该把它放在这里 - 这个question 非常有助于理解“任何 CPU”选项。

标签: c# .net


【解决方案1】:

以前版本的 Visual Studio 习惯将此默认设置为“任何 CPU”,这意味着在 x86 机器上您将始终使用 x86,而在 x64 机器上您最终将运行 x64 或 x86,具体取决于加载程序集的进程是 32 位还是 64 位。

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

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

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

【讨论】:

  • 很好的答案。感谢您的信息。
  • 我还发现answer 有助于理解“任何 CPU”选项。
【解决方案2】:

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

我要补充一点,我最初并不同意这个策略,但由于 x86 调试体验更出色,我已经接受它的本来面目:默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 2018-02-11
    • 2016-05-27
    • 1970-01-01
    • 2014-10-25
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多