TLDR:在64位操作系统上安装.NET时,是否始终存在32位组件?
我曾经将我的应用(IronScheme)完全编译为AnyCPU
。虽然这适用于所有平台,但64位JIT编译器似乎对我的喜好来说太慢了(启动速度大约低550%,一般慢了大约25%)。启动缓慢可以通过NGEN'ng我的程序集解决,并且实际上确实改善启动时间另外奇数500%。这使64位的启动时间(3700ms对140ms)提高了约2600%。当32位和64位都是NGEN时,启动时间是相同的,但32位仍然在运行时表现更好。
现在在大多数情况下,根本不需要64位,我认为在可执行文件中定位x86只是最好的通用解决方案(所有其他程序集都针对AnyCPU
,但是我可以看到,可执行文件确定它的去向。因此,我们的想法是拥有2个启动可执行文件,一个针对x86,另一个针对x64(或者MS称之为amd64)。
在32位操作系统上安装时,我可以确定没有64位组件。但是相反的情况呢? .NET安装程序是否同时安装32位和64位组件?这很重要,因为如果目标与运行时不匹配,非AnyCPU程序集将失败。
示例:
“编译IronScheme.Console.exe时出错:此版本与您正在运行的Windows版本不兼容。”
另请注意,我的应用程序是默认为.NET 2和VS2008构建的,因此新的AnyCPU (32-bit preferred)
选项(在VS2012 / .NET 4.5中)目前不适合我。
PS:对不起,如果之前有人询问过。我不知道如何搜索这个特定的问题,我的谷歌也失败了。
答案 0 :(得分:5)