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 也让我失望了。