【发布时间】:2012-08-04 19:57:43
【问题描述】:
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:抱歉,如果之前有人问过这个问题。我不知道如何搜索这个特定问题,我的 Google fu 也让我失望了。
【问题讨论】:
-
我想我可以在安装程序中进行所有这些检查,但如果不需要,我宁愿不要:)
标签: .net