6

TLDR:在 64 位操作系统上安装 .NET 时,32 位组件是否始终存在?

我曾经将我的应用程序 ( IronScheme ) 完全编译为AnyCPU. 虽然这适用于所有平台,但 64 位 JIT 编译器对我来说似乎太慢了(启动速度慢了大约 550%,一般来说慢了大约 25%)。启动缓慢可以通过 NGEN'ng 我的程序集来解决,并且实际上这样做可以将启动时间再提高 500%。这使 64 位的启动时间(3700 毫秒对 140 毫秒)提高了大约 2600%。当 32 位和 64 位都是 NGEN 时,启动时间是相同的,但 32 位在运行时仍然表现更好。

现在在大多数情况下根本不需要 64 位,我认为在可执行文件中定位 x86 将是最好的通用解决方案(所有其他程序集都是目标AnyCPU,但据我所见,可执行文件决定了它的去向) . 所以这个想法是有 2 个启动可执行文件,一个针对 x86,另一个针对 x64(或 MS 称之为 amd64)。

在 32 位操作系统上安装时,我可以确定不存在 64 位组件。但是相反的情况呢?.NET 安装程序是否同时安装 32 位和 64 位组件?这很重要,因为如果目标与运行时不匹配,NGEN'ng 非 AnyCPU 程序集将失败。

例子:

“编译 IronScheme.Console.exe 时出错:此版本与您运行的 Windows 版本不兼容。”

另请注意,我的应用程序是默认为 .NET 2 和 VS2008 构建的,因此新AnyCPU (32-bit preferred)选项(在 VS2012/.NET 4.5 中)目前不适合我。

PS:对不起,如果之前有人问过这个问题。我不知道如何搜索这个特定的问题,我的谷歌 fu 也让我失望了。

4

1 回答 1

5

32 位组件是否始终存在于 64 位操作系统上?

没有。但是没有安装的情况比较少见。Windows Server Core 2008 R2(可能是Core 2012)支持WOW64作为单独的、可安装和可移动的组件 - 包括 .NET 位。在这里查看更多信息。

为了安装 Server Core 2008 R2 的 WOW64 组件,需要运行:

启动 /w ocsetup NetFx3-ServerCore-WOW64

Server Core 是我能够找到 x64 组件可用的唯一案例,但 x86 组件可能不可用。如果您不针对或不支持服务器核心,那么我相信可以安全地假设 x86 位将与 x64 位一起存在。

于 2012-08-04T20:07:49.473 回答